2015-10-05 5 views
5

Ich scheine die Rückkehr content-type meiner Controller-Methode in der neuen Asp.net MVC nicht in der Lage 6. aufMVC 6 Änderung Rückkehr content-type

Ich habe versucht, verschiedene Varianten zu ändern:

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

in den alten WebAPI Tagen habe ich diese nutzen könnten, und die Formatierungs ändern:

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

könnte ich etwas tun ähnlich in MVC 6?

+0

Wenn Sie etwas in Json formatieren, warum möchten Sie den Inhaltstyp ändern? – Domysee

+0

Json ist ein Beispiel für einen MediaTypeFormatter. Ich möchte Text/x-vcard verwenden. Aber ich sehe nicht, wie ich den MediaTypeFormatter für eine Methode ändern oder den Content-Type-Header ändern kann – mhtsbt

+0

Warum verwenden Sie Content Negotiation nicht? Wenn der Benutzer eine Antwort vom Typ 'text/x-vcard' anfordert, verwendet er automatisch diesen Antworttyp, da Sie einen Konverter dafür haben. Andernfalls wird standardmäßig der Wert json – Domysee

Antwort

9

Sie können dies tun, indem Sie das Attribut Produces("ResultType") für die Controller-Aktion festlegen. Zum Beispiel:

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

Die formatter für den Ergebnistyp gegeben wird die object, unabhängig von den Accept Header konvertiert werden.

Aber Sie müssen eine formatter für den Antworttyp registriert haben. Wenn Sie also "text/x-vcard" verwenden möchten, müssen Sie dafür einen Formatierer erstellen.

zu tun, dass Sie eine Klasse erstellen müssen, die IOutputFormatter und registrieren Sie es in Startup.cs im ConfigureServices() Methode wie folgt implementiert:

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

Hier sind einige zusätzliche Ressourcen, die helfen können Sie tun dass:

Content negotiation in MVC 6

Formatters in ASP.NET MVC 6