2011-11-14 12 views
9

Ho un servizio WCF auto-ospitato che funziona come servizio Windows utilizzando WebAPI per gestire le cose REST e funziona alla grande.Come restituire l'html raw da WebGet WebAPI WCF

Mi rendo conto che dovrei davvero usare IIS o simili per visualizzare le pagine web attuali, ma c'è QUALSIASI modo per ottenere una chiamata di servizio per restituire "solo" html?

Anche se a specificare "BodyStye Bare", ho ancora ottenere il wrapper XML in tutto il codice HTML vero e proprio, cioè

<?xml version="1.0" encoding="UTF-8"?> 
<string> html page contents .... </string> 


[WebGet(UriTemplate = "/start", BodyStyle = WebMessageBodyStyle.Bare)] 
public string StartPage() 
{ 
    return System.IO.File.ReadAllText(@"c:\whatever\somefile.htm"); 
} 

Esiste un modo per fare questo o dovrei rinunciare?

risposta

16

L'attributo bodystyle non ha alcun effetto sull'API Web WCF. L'esempio seguente funzionerà. Non è necessariamente il modo migliore per farlo, ma dovrebbe funzionare supponendo che non abbia fatto errori di battitura :-).

Probabilmente avrebbe più senso leggere il file come stream e utilizzare StreamContent anziché StringContent. Oppure è abbastanza facile creare la tua classe FileContent che accetta il nome file come parametro.

E, l'opzione di auto-host è il modo più semplice per restituire l'HTML statico come utilizzando IIS. Sotto le copertine usano lo stesso driver in modalità kernel HTTP.sys per consegnare i bit.

+3

Grazie mille, che era abbastanza vicino per farmi arrivare lì, ho solo dovuto cambiare la linea su "response.Content.Headers.ContentType = new MediaTypeHeaderValue (" text/html "); " – Swordblaster

4

Dovrai utilizzare un formattatore che accetta "text/html" come tipo di contenuto e richiedere il tipo di contenuto "text/html" nell'intestazione della richiesta.

Se non si aggiunge un formattatore che gestisce il testo/html, l'API Web torna al formattatore XML come predefinito.

Nel proprio caso il formattatore non ha bisogno di formattare nulla ma semplicemente restituire il valore restituito come si sta restituendo già formattato in html.

Problemi correlati