MVC 6更改返回内容类型

时间:2015-10-05 06:38:50

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

我似乎无法在新的Asp.net MVC 6中更改我的controller-method的返回内容类型。

我尝试了各种变体:

Context.Response.Headers.Add("Content-type", "text/x-vcard");

在旧的WebApi时代,我可以使用它,并更改格式化程序:

return Request.CreateResponse(HttpStatusCode.OK, data, JsonMediaTypeFormatter.DefaultMediaType);

我可以在MVC 6中做类似的事情吗?

1 个答案:

答案 0 :(得分:11)

您可以通过在控制器操作上设置Produces("ResultType")属性来实现。例如:

[Produces("application/xml")]
public Object Index()
{
    return new { Id = 100 };
}

给定结果类型的formatter将用于转换object,而不管Accept Header

但是您需要为响应类型注册formatter。因此,如果您想使用"text/x-vcard",则必须为此创建格式化程序。

为此,您需要创建一个实现IOutputFormatter的类,并在Startup.cs方法的ConfigureServices()中注册,如下所示:

services.Configure<MvcOptions>(options =>
{
    options.OutputFormatters.Add(new VCardFormatter());
});

以下是一些其他资源,可以帮助您实现这一目标:

Content negotiation in MVC 6

Formatters in ASP.NET MVC 6