ASP.NET Web API 2 – POST / jQuery

我试图将一个对象发布到我使用Web API 2的服务器上。代码如下:

$.ajax({ cache: false, type: "POST", url: "/api/Employees", data: { EmployeeId: 1 }, success: function(result) { console.log("employees saved successfully"); }, error: function(result) { } }); 

至于Web API:

 public class EmployeesController : ApiController { // POST api/ public void Post([FromBody]Employee value) { } } public class Employee { public Int32 EmployeeId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string JobTitle { get; set; } public DateTime BirthDate { get; set; } public DateTime HireDate { get; set; } public ReferenceData MaritalStatus { get; set; } public Int32 VacationDays { get; set; } public Int32 SickLeaveDays { get; set; } public decimal Salary { get; set; } public string Cid { get; set; } } 

我最终收到了来自服务器的回复

 The requested resource does not support http method 'POST' 

这是因为API路由的工作原理。 它是/ api / NameOfController / NameOfMethod。 您的控制器名称为Employee,您的方法名称为Post。 如果你想使用那个方法,你需要做/ api / Employee / Post。 这就是为什么/ api / Employees / SaveEmployee在您更改方法名称时工作正常(根据您昨天的评论)。

您需要将注释[httppost]放在控制器上

 public class EmployeesController : ApiController { // POST api/ [HttpPost] public void Post([FromBody]Employee value) { } } 

http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

在HTTP方法下的页面中间

您的WebApiConfig.Register方法中是否可能存在与路由相关的非典型或自定义配置? 当ApiController使用动态名称的RESTful约定时,不必添加[HttpPost]元数据属性。 同样,当参数是复杂类型时,[FromBody]属性不是必需的。 默认情况下,WebApi将查看请求的主体并使用正确的MediaTypeFormatter(XML,JSON,FormUrlEncoded)。 下面是默认的WebApiConfig.Register。 如果您进行了更改,是否可以恢复为默认的WebApiConfig.Register,删除元数据属性,然后重试?

  public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }