Returning http status code from Web Api controller

前端 未结 13 1567
一生所求
一生所求 2020-11-27 10:01

I\'m trying to return a status code of 304 not modified for a GET method in a web api controller.

The only way I succeeded was something like this:

p         


        
13条回答
  •  甜味超标
    2020-11-27 10:34

    I don't like having to change my signature to use the HttpCreateResponse type, so I came up with a little bit of an extended solution to hide that.

    public class HttpActionResult : IHttpActionResult
    {
        public HttpActionResult(HttpRequestMessage request) : this(request, HttpStatusCode.OK)
        {
        }
    
        public HttpActionResult(HttpRequestMessage request, HttpStatusCode code) : this(request, code, null)
        {
        }
    
        public HttpActionResult(HttpRequestMessage request, HttpStatusCode code, object result)
        {
            Request = request;
            Code = code;
            Result = result;
        }
    
        public HttpRequestMessage Request { get; }
        public HttpStatusCode Code { get; }
        public object Result { get; }
    
        public Task ExecuteAsync(CancellationToken cancellationToken)
        {
            return Task.FromResult(Request.CreateResponse(Code, Result));
        }
    }
    

    You can then add a method to your ApiController (or better your base controller) like this:

    protected IHttpActionResult CustomResult(HttpStatusCode code, object data) 
    {
        // Request here is the property on the controller.
        return new HttpActionResult(Request, code, data);
    }
    

    Then you can return it just like any of the built in methods:

    [HttpPost]
    public IHttpActionResult Post(Model model)
    {
        return model.Id == 1 ?
                    Ok() :
                    CustomResult(HttpStatusCode.NotAcceptable, new { 
                        data = model, 
                        error = "The ID needs to be 1." 
                    });
    }
    

提交回复
热议问题