may*_*lle 177 c# httpresponse asp.net-web-api
对于从Web API 2控制器返回,如果响应正常(状态200),我可以返回带有响应的内容,如下所示:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想在可能的情况下使用内置的结果类型:https://msdn.microsoft.com/en-us/library/system.web.http.results(v = vs.118).aspx
我的问题是,对于另一种类型的响应(不是200),如何用它返回消息(字符串)?例如,我可以这样做:
public IHttpActionResult Get()
{
return InternalServerError();
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望将其推广,以便我可以使用IHttpActionResult的任何实现发回消息.
我是否需要这样做(并构建我自己的响应消息):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
Run Code Online (Sandbox Code Playgroud)
或者,还有更好的方法?
Sha*_*pov 402
你可以用这个:
return Content(HttpStatusCode.BadRequest, "Any object");
Run Code Online (Sandbox Code Playgroud)
use*_*220 53
您可以使用HttpRequestMessagesExtensions.CreateErrorResponse(System.Net.Http
名称空间),如下所示:
public IHttpActionResult Get()
{
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Message describing the error here"));
}
Run Code Online (Sandbox Code Playgroud)
最好根据请求创建响应以利用Web API的内容协商.
may*_*lle 33
我最终得到了以下解决方案:
public class HttpActionResult : IHttpActionResult
{
private readonly string _message;
private readonly HttpStatusCode _statusCode;
public HttpActionResult(HttpStatusCode statusCode, string message)
{
_statusCode = statusCode;
_message = message;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage(_statusCode)
{
Content = new StringContent(_message)
};
return Task.FromResult(response);
}
}
Run Code Online (Sandbox Code Playgroud)
......可以像这样使用:
public IHttpActionResult Get()
{
return new HttpActionResult(HttpStatusCode.InternalServerError, "error message"); // can use any HTTP status code
}
Run Code Online (Sandbox Code Playgroud)
我愿意接受改进建议.:)
ila*_*ans 15
你也可以这样做:
return InternalServerError(new Exception("SOME CUSTOM MESSAGE"));
Run Code Online (Sandbox Code Playgroud)
任何有兴趣通过返回ResponseMessage返回任何状态代码的人:
//CreateResponse(HttpStatusCode, T value)
return ResponseMessage(Request.CreateResponse(HttpStatusCode.XX, object));
Run Code Online (Sandbox Code Playgroud)
在ASP.NET Web API 2中,您可以将任何内容包装ResponseMessage
在ResponseMessageResult中:
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return new ResponseMessageResult(responseMessage);
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,这可能是获得所需结果的最简单方法,尽管通常最好在System.Web.Http.Results中使用各种结果.
小智 6
我建议阅读这篇文章。有很多方法可以按照建议使用现有的 HttpResponse,但如果您想利用 Web Api 2,那么请考虑使用一些内置的 IHttpActionResult 选项,例如
return Ok()
Run Code Online (Sandbox Code Playgroud)
或者
return NotFound()
Run Code Online (Sandbox Code Playgroud)
简单:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
记住要引用System.Net.Http和System.Net。
归档时间: |
|
查看次数: |
211958 次 |
最近记录: |