具有输入表单对象和路由值的Web API ......这是好方法吗?

时间:2013-10-24 10:48:03

标签: asp.net-mvc asp.net-mvc-routing asp.net-web-api

我有一个Web API,它将接收来自“路由URL”和“请求正文”的输入。

示例:

http://mysite/api/GetIds/85/5

    {
       "ids":["1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234","1234"]        
    }

这是更好的方法吗?我知道我可以将路由vales放在请求对象中......但该对象是常见对象。所以我不想改变它。无论如何我只是想知道它是否正确?

提前致谢...

1 个答案:

答案 0 :(得分:0)

在使用get动词的HTTP方法中,不支持Request Body,因此您无法在请求正文中传递它。您必须使用请求标头,因此,在这种情况下,参数可以在url中,这是get方法提供给您的。

您可以使用a post请求,并将其传递给请求正文。 PostPut支持请求正文。要传递jSon对象,您必须在请求标头上应用以下指令:

content-type: application/json

到web-api了解您在body上发送的内容是json格式,并知道如何为您反序列化。您还可以在帖子请求中使用网址上的参数,因为您分别指定了FromUriFromBody

在您的方法中,您可以:

public HttpResponseMessage Post([FromUri] int id, [FromBody] string[] ids)
{
   // some process here
   var model = /* create a model to output on the response body, if you need */
   return Request.CreateResponse(HttpStatusCode.OK, model);
}

如果正文中包含多个属性,则可能是使用DTO对象的好方法,并将此对象的实例作为Post方法的参数接收。