MVC 6改变返回内容类型

本文关键字:类型 返回 改变 MVC | 更新日期: 2023-09-27 18:16:12

我似乎无法在新的Asp.net MVC 6中更改控制器方法的返回内容类型。

我尝试了各种变化:

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

在旧的WebApi时代,我可以使用这个,并改变格式化器:

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

我可以做类似的MVC 6吗?

MVC 6改变返回内容类型

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

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

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

但是您需要为响应类型注册一个formatter。所以如果你想使用"text/x-vcard",你必须为此创建一个格式化器。

要做到这一点,你需要创建一个实现IOutputFormatter的类,并在ConfigureServices()方法的Startup.cs中注册它,如下所示:
services.Configure<MvcOptions>(options =>
{
    options.OutputFormatters.Add(new VCardFormatter());
});

这里有一些额外的资源可以帮助你做到这一点:

MVC 6中的内容协商

ASP中的格式化程序。. NET MVC 6