2017-05-31 27 views
0

无论是否可以接受的RESTful设计,我想给出一个结果,如下面的代码所做的,但与200 OK StatusCode。CreatedAtRoute(OK)(012)代码

return CreatedAtRoute("DefaultApi", new { id = model.Id }, model); 

上方的一个提供Location头,其利用给定id路线变量和JSON序列model内容。

return Ok(); // how to make it with this? 

请注意,我正在使用ASP.NET WebApi2(.Net 4.6)模板。

回答

0

这个怎么样,创建一个自定义IHttpActionResult是装饰CreatedAtRouteNegotiatedContentResult并更新状态代码:

public class OkWithLocation<T> : IHttpActionResult 
{ 
    private readonly CreatedAtRouteNegotiatedContentResult<T> _result; 

    public OkWithLocation(CreatedAtRouteNegotiatedContentResult<T> result) 
    { 
     _result = result; 
    } 

    public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
    { 
     var response = await _result.ExecuteAsync(cancellationToken).ConfigureAwait(false); 
     response.StatusCode = HttpStatusCode.OK; 
     return response; 
    } 
} 

然后在你的控制器动作使用:

return new OkWithLocation<Model>(CreatedAtRoute("DefaultApi", new { id = model.Id }, model)); 

也许不是最漂亮的,但它完成了工作。

+0

不错,干净。谢谢 – Youngjae

相关问题