3

nuget.org の ASP.NET Web API リリース (金曜日の RC の前のバージョン) から myget.org のナイトリー ビルドにアップグレードしました。予想通り、多くの重大な変更があり、そのうちの 1 つを回避できないようです。アクションでオブジェクトを返し、ステータス コードを 201 Created に設定するシナリオがあります。これは以前は非常に簡単に実行できました(コンパイルできない可能性があります-頭のてっぺんからの概念的なコード):

Session session = GetSessionInfo(requestMessage);
var response = new HttpResonseMessage(HttpStatusCode.Created);
response.Content = response.CreateContent(session);
return response;

CreateContent は、実際には System.Net.Http.HttpResponseMessageExtensions にある拡張メソッドであり、ObjectContent の内部コンストラクターを呼び出します。新しいリリースでは、HttpResponseMessageExtensions が削除されたようで、ObjectContent の内部コンストラクターも削除されました。ここで、ObjectContent コンストラクターを呼び出す必要があるように思われます。次のものが、私たちのニーズに最も適しているようです。

public class ObjectContent<T> : ObjectContent
{
    public ObjectContent(T value, MediaTypeFormatter formatter)
    {
    }
}

ただし、コンテンツ ネゴシエーションをアクションのロジックに混ぜて、MediaTypeFormatter を渡す必要があるようです。私たちの設定では、コンテンツ ネゴシエーションは一般的であり、コントローラーから完全に切り離されています。

オブジェクトを返し、応答ステータス コードを設定するが、MediaTypeFormatter、メディア タイプ、またはその他のコンテンツ ネゴシエーション関連のものを処理する必要がないシナリオを解決するための提案はありますか?

4

1 に答える 1

5

ObjectContent<T>作成の仕組みを再設計しました。CreateResponse()RCから始めて、拡張メソッドのセットを呼び出す必要があります(それらはオフになっていますHttpRequestMessage)。これにより、実際には、内部HttpResponseMessageでネゴシエートされたコンテンツのインスタンスを持つのインスタンスが生成されます。ObjectContent<T>だから、次のようなもの:

Session session = GetSessionInfo(requestMessage);
var response = Request.CreateResponse(HttpStatusCode.Created, session);
return response;
于 2012-06-05T01:35:48.413 に答える