9

WebAPIを使用してRESTを処理するWindowsサービスとして実行されている自己ホスト型WCFサービスがあり、うまく機能します。

IIS などを使用して実際の Web ページを作成する必要があることは理解していますが、サービスを呼び出して "だけ" html を返す方法はありますか?

「BodyStye Bare」を指定しても、実際の 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");
}

これを行う方法はありますか、それともあきらめるべきですか?

4

2 に答える 2

16

bodystyle属性は、WCFWebAPIには影響しません。以下の例が機能します。これは必ずしも最善の方法ではありませんが、タイプミスをしなかった場合は機能するはずです:-)。

[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クラスを作成するのは簡単です。

また、セルフホストオプションは、IISを使用する場合と同じように静的HTMLを返すための実行可能な方法です。裏では、同じHTTP.sysカーネルモードドライバーを使用してビットを配信します。

于 2011-11-14T13:37:25.817 に答える
4

「text/html」をコンテンツ タイプとして受け入れるフォーマッタを使用し、リクエスト ヘッダーでコンテンツ タイプ「text/html」をリクエストする必要があります。

text/html を処理するフォーマッターを追加しない場合、Web API は既定で XML フォーマッターにフォールバックします。

あなたの場合、フォーマッタは何もフォーマットする必要はありませんが、すでにフォーマットされたhtmlを返しているので、戻り値を返すだけです。

于 2011-11-14T08:56:02.410 に答える