我似乎无法在新的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中做类似的事情吗?
答案 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());
});
以下是一些其他资源,可以帮助您实现这一目标: