我有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中出现问题。
答案 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的缩进方法,从来没有意识到这一点。