对于从Web API 2控制器返回,如果响应是OK(状态200),我可以返回内容与响应:

public IHttpActionResult Get()
{
    string myResult = ...
    return Ok(myResult);
}

如果可能的话,我希望在这里尽可能使用内置结果类型

我的问题是,对于另一种类型的响应(不是200),我如何用它返回消息(字符串)?例如,我可以这样做:

public IHttpActionResult Get()
{
    return InternalServerError();
}

但这不是:

public IHttpActionResult Get()
{
    return InternalServerError("Message describing the error here");
}

理想情况下,我希望这是一般化的,这样我就可以用IHttpActionResult的任何实现发送回消息。

我需要这样做(并建立我的响应消息):

public IHttpActionResult Get()
{
    HttpResponseMessage responseMessage = ...;
    return ResponseMessage(responseMessage);
}

还是有更好的办法?


当前回答

简单:

return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));

记住引用System.Net.Http和System.Net。

其他回答

抱歉回答晚了为什么不简单使用

return BadRequest("your message");

我使用它为我所有的IHttpActionResult错误它工作得很好

以下是文档:https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx

在ASP。你可以在一个ResponseMessageResult中包装任何ResponseMessage:

public IHttpActionResult Get()
{
   HttpResponseMessage responseMessage = ...
   return new ResponseMessageResult(responseMessage);
}

在某些情况下,这可能是获得所需结果的最简单方法,尽管通常使用System.Web.Http.Results中的各种结果可能更可取。

你可以用这个:

return Content(HttpStatusCode.BadRequest, "Any object");

你还可以:

return InternalServerError(new Exception("SOME CUSTOM MESSAGE"));

你可以使用HttpRequestMessagesExtensions。CreateErrorResponse (System.Net。Http命名空间),就像这样:

public IHttpActionResult Get()
{
   return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Message describing the error here"));
}

最好基于请求创建响应,以利用Web API的内容协商。