C# 使用Get调用Web API 2可以,但使用Post调用失败
我可以通过C# 使用Get调用Web API 2可以,但使用Post调用失败,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我可以通过get从静态html表单调用WebAPI2,如下所示 Web API: public class WebServiceController : ApiController { [HttpGet] [Route("api/WebService")] public IHttpActionResult Post(string FirstName, string Surname) { //work return StatusCo
get
从静态html表单
调用WebAPI2
,如下所示
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>
当我使用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; }
}
更改web api路由始终是一个很好的实践,它是
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
到
之后,您将不需要遵循get put和post,您可以使用全名,就像MVC路由一样。例如
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);