调用get request web api

时间:2015-12-24 05:11:42

标签: c# asp.net asp.net-web-api

我有ASP.NET WebAPI项目,它有Get API - “约会/可用”定义如下:

using System;
using System.Web.Http;
using AppointmentScheduler;
using Microsoft.Practices.Unity;

[RoutePrefix("appointment")]
public class AppointmentController : ApiController
{
    #region [ Properties ]
    [Dependency]
    public IAppointmentScheduler AppointmentScheduler { get; set; }
    #endregion

    #region [ Methods - API ]
    [Route("available")]
    [HttpGet]
    public IHttpActionResult GetAvailableAppointments(string agentEmailId, DateTime startDate, DateTime endDate) {
        try {
            return base.Ok(this.AppointmentScheduler.GetAppointments(agentEmailId, startDate, endDate));
        } catch (Exception exception) {
            return base.InternalServerError(exception);
        }
    }

    #endregion
}

但是,在运行解决方案并从Fiddler调用API作为“GET”请求时,我收到以下错误:

  

HTTP 405错误 - 请求的资源不支持http方法'GET'。

在发送与“POST”相同的请求时,我得到HTTP - 200响应。即使我的方法从未被调用(API方法的断点从未被命中)

我查看了此问题的先前查询here。但是没有一个答案似乎能解决我的问题。

有趣的是,除非我疯了,否则确切的代码会在某个时候为我工作。

我认为当我尝试在VS 2015上打开最初构建在VS 2013上的解决方案时,问题就出现了。我觉得,只有在此之后,解决方案才开始在两个IDE中出现问题。

1 个答案:

答案 0 :(得分:0)

事实证明我正在使用错误的网址调用API - 而不是打电话给#34;预约/可用",我打电话给#34; api /预约/可用"因为失误。 结束了我的早晨在非问题上的浪费。

然而,有一点我仍然无法理解为什么它返回Http状态405为" Get"请求和200#" Post"而不是" 404"当API不存在时。

<强>更新

遇到问题,在同一个控制器中还有一个方法。

    [HttpPost]
    public IHttpActionResult BlockAppointment(Appointment appointment) {
        try {
            return base.Ok(this.AppointmentScheduler.BlockAppointment(appointment));
        } catch (Exception exception) {
            return base.InternalServerError(exception);
        }
    }

上述方法的API调用是:POST api / appointment。所以,我实际上是在调用上面的方法,而不是Fiddler的缩进方法,从来没有意识到这一点。