使用 Get 调用 Web API 2 可以,但使用 Post 失败

Calling Web API 2 with Get is OK but fails with Post

我可以使用 getstatic html form 调用 Web Api 2,如下所示。

网页API:

public class WebServiceController : ApiController
{
    [HttpGet]
    [Route("api/WebService")]
    public IHttpActionResult Post(string FirstName, string Surname)
    { 
        //work
        return StatusCode(HttpStatusCode.OK);
    }
}

HTML 表格:

<form action="http://localhost:27020/api/WebService/" method="get">
    <input type="text" name="FirstName" id="FirstName" />
    <input type="text" name="Surname" id="Surname" />
    <input type="submit" />
</form>

当我使用 method="post"[HttpPost]get 切换到 post 请求时,我在 Chrome 上得到下面的屏幕截图:

我做错了什么?

WebAPI 无法独立读取每个方法参数。你必须封装它们:

public class WebServiceController : ApiController
{
    [HttpGet]
    [Route("api/WebService")]
    public IHttpActionResult Post(MyRequest request)
    { 
        //work
        return StatusCode(HttpStatusCode.OK);
    }
}

public class MyRequest
{
    public string FirstName { get; set; }
    public string Surname { get; set; }
}

更改网络 api 路由始终是一个好习惯

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

之后就不需要跟get put和post了,可以像MVC路由一样使用全名。例如。 http://yourhost/api/WebService/your_action.