使用Get调用Web API 2是正常的但是使用Post失败

时间:2015-06-21 07:17:23

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

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

Web 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>

当我使用getpostmethod="post"切换到[HttpPost]请求时,我会在Chrome上获得以下屏幕截图:

enter image description here

我做错了什么?

2 个答案:

答案 0 :(得分:2)

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; }
}

答案 1 :(得分:0)

改变web 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