小编典典

使用 IHttpActionResult 为非 OK 响应返回内容

all

为了从 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);
}

或者,还有更好的方法?


阅读 61

收藏
2022-06-27

共1个答案

小编典典

我最终采用了以下解决方案:

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
}

我愿意接受改进建议。:)

2022-06-27