为了从 Web API 2 控制器返回,如果响应正常(状态 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); }
或者,还有更好的方法?
我最终采用了以下解决方案:
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); } }
…可以这样使用:
public IHttpActionResult Get() { return new HttpActionResult(HttpStatusCode.InternalServerError, "error message"); // can use any HTTP status code }
我愿意接受改进建议。:)