C# MVC 6更改返回内容类型
在新的Asp.net MVC 6中,我似乎无法更改控制器方法的返回内容类型 我尝试了各种变化:C# MVC 6更改返回内容类型,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,在新的Asp.net MVC 6中,我似乎无法更改控制器方法的返回内容类型 我尝试了各种变化: Context.Response.Headers.Add("Content-type", "text/x-vcard"); 在旧的WebApi时代,我可以使用它,并更改格式化程序: return Request.CreateResponse(HttpStatusCode.OK, data, JsonMediaTypeFormatter.DefaultMediaType); 我可以在MVC 6中执行
Context.Response.Headers.Add("Content-type", "text/x-vcard");
在旧的WebApi时代,我可以使用它,并更改格式化程序:
return Request.CreateResponse(HttpStatusCode.OK, data, JsonMediaTypeFormatter.DefaultMediaType);
我可以在MVC 6中执行类似的操作吗?您可以通过在控制器操作上设置
products(“ResultType”)
属性来执行此操作。例如:
[Produces("application/xml")]
public Object Index()
{
return new { Id = 100 };
}
给定结果类型的格式化程序
将用于转换对象
,而不考虑接受标头
但是您需要为响应类型注册一个格式化程序。因此,如果您想使用“text/x-vcard”
,您必须为此创建一个格式化程序
为此,您需要创建一个实现IOutputFormatter
的类,并在Startup.cs
的ConfigureServices()
方法中注册它,如下所示:
services.Configure<MvcOptions>(options =>
{
options.OutputFormatters.Add(new VCardFormatter());
});
services.Configure(选项=>
{
options.OutputFormatters.Add(新VCardFormatter());
});
以下是一些可以帮助您做到这一点的额外资源:
如果您使用Json格式化某些内容,为什么要更改内容类型?Json是MediaTypeFormatter的一个示例。我想使用text/x-vcard。但是我不知道如何为一个方法更改MediaTypeFormatter,或者更改内容类型标题为什么不使用内容协商?如果用户请求类型为text/x-vcard
的响应,它将自动使用该响应类型,前提是您有一个相应的转换器。否则它将默认为json。在这种情况下,客户端是浏览器。我无法控制它。@mhtsbt您是否尝试设置响应.ContentType
属性?如果我想返回RFC 7807所述的问题,其中媒体类型仅在我实际返回问题时更改为application/problem+json
,否则应停留在application/json
?