2017-02-21 5 views
0

私はWindowsサービスを構築する方法を学んでいますが、ブラウザからのリクエスト(例えばlocalhost:8081/index)が必要です。したがって、HTTP応答にはHTMLページが含まれている必要があります。 index.htmlファイルをダブルクリックするとHTMLページが正常に表示されますが、Webブラウザから要求するとCSSおよびjsファイルがすべて失われます。 私はクロームで開発者のツールを開いて、すべてのCSSとJSファイルが壊れていて、HTMLページのコード(奇妙なもの)を含んでいることを知りました。
Screenshot from developer toolC#windows service:画像、CSS、JSをレスポンスとして持つHTMLページ

私はその後http://localhost/index要求、およびオープンのindex.htmlファイルや使用File.ReadAllBytes(ファイル)をリッスンするHttpListenerContextクラスを使用していました。応答を構成するときに、私は次のコードを使用:

responseBytes = File.ReadAllBytes(file); 
response.ContentLength64 = responseBytes.Length; 
await response.OutputStream.WriteAsync(responseBytes, 0, responseBytes.Length); 
response.OutputStream.Close(); 

誰もがなぜこれが起こっている私が把握するのに役立つことはできますか?

+0

出力にhtmlだけを書き出すので、あなたはすべてをあなたのhtmlにパックするか、または.css、.jsなどをホストする必要があります。 .cssファイルと.jsファイルを参照するだけであれば、ブラウザはどのようにこれらのリソースを取得しますか?あなたのHttpListenerContextはそれらのリソースの要求を受け取りますが、htmlを吐き出します。 – Filburt

+0

私はあなたが何を意味しているのか知っていますが、私の会社のコードベースには実際の例があります。 HTMLファイル以外のリソースをロードするための余分な手順がないようです。 – lolol

+1

'HttpListenerContext'は、そのドメインに対して行われたリクエストをリッスンし、パス/ファイル名に関係なく同じコンテンツを提供している可能性があります。あなたの設定をもっと見ることなく、言うことは不可能です。 –

答えて

0

私はコードをトレースしたときに自分で答えを見つけました。リクエストlocalhost/indexがブラウザから来ると、GETメソッドは最初にindex.htmlを取得します。その後、CSS、イメージ、JSのために他のGETリクエストが送られます。前にリクエストしています)。

次に、CSS、イメージ、JSファイルを含むレスポンスを構成するハンドラーを更新しました。すべてが今、完璧に動作します。

関連する問題