2017-05-31 77 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