5

Web API コントローラーでメソッドの成功リターン コードを指定する方法はありますか?

私の最初のコントローラーは以下のように構成されていました

public HttpResponseMessage PostProduct(string id, Product product)
{   
var product= service.CreateProduct(product);
return Request.CreateResponse(HttpStatusCode.Created, product);
}

ただし、Web API ヘルプ ページを生成する場合、上記のアプローチには欠点があります。Web API ヘルプ ページ API は、厳密に型指定された Product が応答であることを自動的にデコードできないため、ドキュメントにサンプル応答オブジェクトを生成します。

したがって、以下のアプローチを使用しますが、ここでは成功コードはOK (200)and notCreated (201)です。とにかく、属性スタイルの構文を使用してメソッドの成功コードを制御できますか? さらに、作成したリソースが利用可能な URL に Location ヘッダーを設定したいと思いますHttpResponseMesage

public Product PostProduct(string id, Product product)
{   
var product= service.CreateProduct(product);
return product;
}
4

2 に答える 2

3

以下の観察について:

However, there is drawback to the above approach when you generate Web API help pages. The Web API Help page API cannot automatically decode that the strongly typed Product is the response and hence generate a sample response object in its documentation.

HelpPageConfig.csHelpPage パッケージでインストールされるファイルを確認できます。応答の実際のタイプを設定できる、あなたのようなシナリオの正確な例があります。

Web API の最新バージョン (5.0 - 現在は RC) ではResponseType、アクションを実際の型で装飾するために使用できる属性が導入されました。この属性をシナリオに使用できます。

于 2013-09-27T04:34:57.050 に答える
1

私はこれをします:

[HttpGet]
public MyObject MyMethod()
{
    try
    {
        return mysService.GetMyObject()
    }
    catch (SomeException)
    {
        throw new HttpResponseException(
            new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content =
                        new StringContent("Something went wrong.")
                });
    }
}

期待した結果が得られない場合は、HttpResponseException をスローします。

于 2013-09-27T12:37:04.127 に答える