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?
1 ответ
Вы можете сделать это, установив 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());
});
Вот некоторые дополнительные ресурсы, которые могут помочь вам сделать это: