2015-06-21 134 views
1

我能夠調用Web Api 2,從static html formget如下。使用Get調用Web API 2是可以的,但是不能使用Post

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

當我切換從getpost要求與method="post"[HttpPost]我得到下面的截圖在Chrome:

enter image description here

我在做什麼錯了?

回答

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

它始終是改變網頁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和post,你可以像MVC路由一樣使用全名。例如。 http://yourhost/api/WebService/your_action

相關問題