2015-10-05 12 views
5

mi sembrano essere in grado di cambiare il ritorno tipo di contenuto mio controller metodo nel nuovo Asp.net MVC 6.MVC 6 ritorno cambiare tipo di contenuto

Ho provato varie varianti:

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

ai vecchi tempi WebAPI potrei usare questo, e cambiare il formattatore:

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

potevo fare qualcosa di simile in MVC 6?

+0

Se si formatta qualcosa in Json, perché si desidera modificare il tipo di contenuto? – Domysee

+0

Json è un esempio di MediaTypeFormatter. Voglio usare text/x-vcard. Ma non vedo come posso modificare MediaTypeFormatter per un metodo o modificare l'intestazione del tipo di contenuto – mhtsbt

+0

Perché non usi la negoziazione del contenuto? Se l'utente richiede una risposta di tipo 'text/x-vcard', userà automaticamente quel tipo di risposta, dato che si ha un convertitore per questo. Altrimenti verrà impostato automaticamente su json – Domysee

risposta

9

È possibile farlo impostando l'attributo Produces("ResultType") sull'azione del controller. Ad esempio:

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

Il formatter per il tipo di risultato sarà usato per convertire il object, indipendentemente dal Accept Header.

Ma è necessario disporre di un formatter registrato per il tipo di risposta. Quindi se vuoi usare "text/x-vcard", dovresti creare un formattatore per questo.

Per fare questo è necessario creare una classe che implementa IOutputFormatter e registrarlo in Startup.cs nel metodo ConfigureServices() in questo modo:

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

Ecco alcuni risorse aggiuntive che possono aiutare a fare che:

Content negotiation in MVC 6

Formatters in ASP.NET MVC 6