2011-11-14 3 views
9

WebAPIを使用してWindowsサービスとして実行している自己ホストWCFサービスをRESTの処理に使用しています。WCF WebAPI WebGetから未処理のHTMLを返す方法

実際にIISなどのWebページを使用して実際のWebページを使用すべきであることを認識していますが、「just」htmlを返すためのサービス呼び出しを得る方法はありますか?

私は「BodyStyeベア」を指定しても、私はまだ実際のHTMLの周りXMLラッパーを取得、すなわち

<?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"); 
} 

これを行うか、私はあきらめなければならないどのような方法がありますか?

答えて

16

bodystyle属性は、WCF Web APIには影響しません。以下の例が有効です。これは必ずしも最良の方法ではありませんが、私は誤植をしていないと仮定して動作するはずです:-)。

[WebGet(UriTemplate = "/start")] 
public HttpResponseMessage StartPage() { 
    var response = new HttpResponseMessage(); 
    response.Content = new StringContent(System.IO.File.ReadAllText(@"c:\whatever\somefile.htm")); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); 
    return response; 
} 

ファイルをストリームとして読み込んで、StringContentの代わりにStreamContentを使用する方が意味があります。または、ファイル名をパラメータとして受け入れる独自のFileContentクラスを作成するのは簡単です。

また、self-hostオプションは、静的HTMLをIISを使用しているものと同じように返す有効な方法です。カバーの下では、同じHTTP.sysカーネルモードドライバを使用してビットを配信します。

+3

ありがとうございました。そこに私を連れて行くには十分に近いので、私はちょうど1行を "response.Content.Headers.ContentType = new MediaTypeHeaderValue(" text/html "); " – Swordblaster

4

"text/html"をコンテンツタイプとして受け入れ、要求ヘッダーにコンテンツタイプ "text/html"を要求するフォーマッタを使用する必要があります。

text/htmlを処理するフォーマッタを追加しないと、Web APIはデフォルトとしてXMLフォーマッタに戻ります。

あなたのケースでは、フォーマッタは何も書式を設定する必要はありませんが、書式設定されたhtmlを返すので戻り値を返すだけです。

関連する問題