如何将响应格式设置为与请求相同的格式?

时间:2013-02-04 19:34:45

标签: asp.net .net asp.net-mvc-4

我创建了一个自定义调度程序来处理使用客户媒体类型的版本控制。它看起来像这样:

application/vnd.mycompany.myapi-v1+json

为了选择正确的控制器而提取的版本号全部正常工作,但作为MVC的新手,我不知道如何设置响应格式。我们要做的是设置响应格式以匹配请求。所以在这个例子中,响应将在json中。现在我假设我必须从这个内容类型中提取它,这很好,但有人可以给我一个例子,说明如何在MVC4中设置此请求的响应格式,假设我已经创建了该方法将格式提取为字符串?

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

P.S。在请求期间没有客户端使用接受标头的原因是,已经存在使用我们的旧服务的客户端,这将设置接受标头以匹配请求。

2 个答案:

答案 0 :(得分: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"):
}

答案 1 :(得分: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));
}