Asp.net 如何将响应格式设置为与请求相同的格式?
我创建了一个自定义调度程序来处理使用客户媒体类型的版本控制。它看起来像这样:Asp.net 如何将响应格式设置为与请求相同的格式?,asp.net,.net,asp.net-mvc-4,Asp.net,.net,Asp.net Mvc 4,我创建了一个自定义调度程序来处理使用客户媒体类型的版本控制。它看起来像这样: application/vnd.mycompany.myapi-v1+json 为了选择正确的控制器而提取版本号是完全正确的,但是对于MVC来说是新的,我不确定如何设置响应格式。我们要做的是设置响应格式以匹配请求。因此,在本例中,响应将使用json。现在我假设我也必须从这个内容类型中提取,这很好,但是有人能给我一个例子,说明我如何在MVC4中设置这个请求的响应格式,假设我已经创建了将格式提取为字符串的方法吗 priv
application/vnd.mycompany.myapi-v1+json
为了选择正确的控制器而提取版本号是完全正确的,但是对于MVC来说是新的,我不确定如何设置响应格式。我们要做的是设置响应格式以匹配请求。因此,在本例中,响应将使用json。现在我假设我也必须从这个内容类型中提取,这很好,但是有人能给我一个例子,说明我如何在MVC4中设置这个请求的响应格式,假设我已经创建了将格式提取为字符串的方法吗
private string GetResponseFormat(){
//some shennanigans here
}
另外,在请求过程中不让客户端使用accept标头的原因是已经有客户端在使用我们的旧服务,该服务将设置accept标头以匹配请求。我能够清除现有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));
}
您还可以使用
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"):
}