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());
});

Вот некоторые дополнительные ресурсы, которые могут помочь вам сделать это:

Согласование контента в MVC 6

Форматеры в ASP.NET MVC 6

Другие вопросы по тегам