Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 6更改返回内容类型_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 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中执行

在新的Asp.net 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