0

顧客のメディアタイプを使用するバージョン管理を処理するカスタムディスパッチャーを作成しました。これは次のようになります。

application/vnd.mycompany.myapi-v1+json

正しいコントローラーを選択するためのバージョン番号の抽出はすべて正常に機能していますが、MVCを初めて使用するため、応答形式の設定方法がわかりません。要求に一致するように応答形式を設定します。したがって、この例では、応答はjsonになります。ここで、このコンテンツタイプからもそれを抽出する必要があると思いますが、これは問題ありませんが、MVC4でこの要求の応答形式を設定する方法の例を教えてもらえますか?フォーマットを文字列として抽出しますか?

private string GetResponseFormat(){
   //some shennanigans here
}

PSリクエスト中にクライアントにacceptヘッダーを使用させない理由は、リクエストに一致するようにacceptヘッダーを設定する古いサービスを使用しているクライアントがすでに存在するためです。

4

2 に答える 2

1

Contentメソッドを使用して、カスタム応答タイプを返すこともできます。

string responseType = GetResponseFormat();
...
switch(responseType){
    case "json":
        string json = "yourJSON";
        return Content(json, "application/json");
    case "xml":
        string xml = "yourXML";
        return Content(xml, "text/xml");
    default:
        string plaintxt = "yourPlaintext";
        return Content(plaintxt, "text/plain"):
}
于 2013-02-04T21:07:57.233 に答える
0

既存のAcceptヘッダーをクリアして、それに追加することができました。

private void SetResponseFormatToRequestFormat(HttpRequestMessage request)
{
    // figure out what the request format was
    _contentTypeHeader = request.Content.Headers.ContentType.ToString();
    if(_contentTypeHeader.Contains("xml")) _contentType = "application/xml";
    if (_contentTypeHeader.Contains("json")) _contentType = "application/json";

    // set response format to the same as the request format
    request.Headers.Accept.Clear();
    request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(_contentType));
}
于 2013-02-04T20:47:04.590 に答える