2

Mac の asp.net vnext で単純な WebApi を構築しています。このチュートリアルで設定された例に従いましたが、コントローラー メソッドで設定した応答コードがオーバーライドされるという問題があります。

CrudController でこのメソッドを使用します。

[HttpPost]
public void Post([FromBody]CrudObject crudObject)
{
   var url = Url.RouteUrl("GetByIdRoute", new {id = 1}, 
       Request.Scheme, Request.Host.ToUriComponent());
   Context.Response.StatusCode = 201;
   Context.Response.Headers["Location"] = url;
 }

これをカールするか、PostMan でヒットすると、201 Created 応答と、別の URL を指す Location ヘッダーが表示されます。kestrel を使用してこれを実行すると、Location ヘッダーが表示されますが、応答コードは 204 No Content です。

これは、ステータス コードへの変更をオーバーライドする vnext ミドルウェアであると想定しています。そうですか?もしそうなら、それは私のステータスコードを上書きするべきですか、それともバグですか? それが正しい動作である場合、どのようにリダイレクトを行うべきですか?

4

1 に答える 1

3

最近voidリターン アクションの動作がステータス コードに変換されないように変更されました。ただし、シナリオでは、ヘッダーを設定するヘルパー メソッド (実際には が作成されます) を使用できます。204CreatedAtRouteCreatedAtRouteResultLocation

[HttpPost]
public void Post([FromBody]CrudObject crudObject)
{
    return CreatedAtRoute(routeName: "GetByIdRoute", routeValues: new { id = 1 }, value: null);
}

作成したオブジェクトをクライアントに返したくないのはわざとですか? nullそうでない場合は、パラメーターに渡さないことで上記のコードを変更できvalueます。

于 2015-06-15T10:53:24.850 に答える