jcv*_*dan 15 .net c# asp.net-web-api
对于动作方法的返回类型,Web API中的一般做法似乎是什么?
像这样返回CLR对象:
public IEnumerable<ContactModel> Get()
{
return _contactService.GetAllForUser();
}
Run Code Online (Sandbox Code Playgroud)
或者将对象包装在HttpResponseMessage:
public HttpResponseMessage Get()
{
IEnumerable<ContactModel> contacts = _contactService.GetAllForUser();
return Request.CreateResponse((HttpStatusCode) 200, contacts);
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢将自己的CLR对象作为返回类型,因为它显然会产生更干净的方法,因为您不必HttpResponseMessage每次都实例化.
Dar*_*ler 17
这里重要的一点是,这种选择是一个偏好的问题.如果您正在创建一个"URI样式"HTTP api,其中返回类型已经提前由客户端知道,那么这可能是您首选的方法.
但是,就个人而言,我不喜欢返回CLR类型.我相信通过采用这种方法,您可能会失去HTTP的许多好处.我总是返回HttpResponseMessage.
如果考虑标准过程调用,则有两种可能的结果,即返回返回类型或获得异常.HTTP交互比重定向,临时不可用服务器,无内容,未修改,服务器连接,首选标头变体等更灵活.
我认为ApiController类是您的应用程序有机会将面向对象的方法调用映射到HTTP请求/响应的地方.我认为这种映射明确有助于利用HTTP.让框架神奇地将CLR类型转换为某种线表示,确实可以节省一些输入,但它会模糊正在发生的事情,并迫使您通过ActionFilters和MessageHandler间接地进行任何类型的HTTP交互.
我没有兴趣说服那些更喜欢返回CLR类型的人改变,我只想重新向那些喜欢返回HttpResponseMessage的人保证这是一个完全可行的选择,尽管事实上你不会看到很多样本那.
我认为第一个选择是最好的。无论如何,如果没有错误,返回代码将为 200,无需您进行任何设置。
如果有任何异常,您可以抛出HttpResponseException带有适当代码和消息的异常
throw new HttpResponseException(
Request.CreateResponse<string>(HttpStatusCode.BadRequest, 'Your message'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6610 次 |
| 最近记录: |