0

我有一个 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"]        
    }

那么这是更好的方法吗?我知道我可以将路由值放在请求对象中……但该对象是公共对象。所以我不想改变它。无论如何,我只想知道它是否正确?

提前致谢...

4

1 回答 1

0

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

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

content-type: application/json

让 web-api 了解您发送的内容bodyjson格式,并知道如何为您反序列化。您还可以在发布请求中使用 url 上的参数,因为您分别指定了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方法的参数。

于 2013-10-24T12:12:32.923 回答