2016-08-08 15 views
5

web apiにアクセスする他のホストのクライアントを有効にするために、.UseUrls("http://*:5000")行を追加しました。ポート番号を変更した後でVisual Studioでデバッグできませんか?

public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .UseUrls("http://*:5000") // Added 
      .Build(); 

     host.Run(); 
    } 

しかし、localhost:5000/api/Testにアクセスするためにブラウザを使用するとHTTP/1.1 400 Bad Requestのエラーを得ましたか? .UseUrls()は本番用にのみコンパイルする必要がありますか?

 
HTTP/1.1 400 Bad Request 
Date: Mon, 08 Aug 2016 21:42:30 GMT 
Content-Length: 0 
Server: Kestrel 

次のメッセージは、テスト時にVisual Studio出力ウィンドウからコピーされます。

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:5000/api/Test

Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware:Error: 'MS-ASPNETCORE-TOKEN' does not match the expected pairing token '9bca37f2-7eda-4517-9f8f-60b6cc05cf01', request rejected.

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 8.5976ms 400

+1

UseIISIntegration()の前に 'UseUrls()'を呼び出すことができますか? http://stackoverflow.com/questions/37862475/specifying-the-url-port-that-a-asp-net-core-1-0-webapi-exe-should-use-in-progr –

+0

をご確認ください。 IIS、IISExpress、またはスタンドアロンの内部でこれを実行していました。 –

+0

'UseIISIntegration()'の前に 'UseUrls()'を移動し、デバッグ時にアプリケーション名を実行します。 IIS Expressで動作させてもまだ動作しません。 – ca9163d9

答えて

7

最初.UseUrls()および/または.UseConfig()、その後.UseIISIntegration()を呼び出す必要があります。

IIS/IISExpressでokを実行すると、2つのプロセスが終了します。目的のポートでリスンするIISと別のポートでKestrelあなたの要求はIISに送られ、それからKestrelに転送されます(MS-ASPNETCORE-TOKEN)。

.UseIISIntegration()を呼び出すと、このマッピングが非表示になります。それは実際にあなたのアプリのポートを変更し、希望のポートにIISを設定します。しかし、両方のメソッドを間違った順序で呼び出すと、ブレークします。

KestrelがIISの後ろで実行されると予想され、直接要求を受け取ったため、このエラーメッセージが表示されます。そして、IISにはMS-ASPNETCORE-TOKENヘッダーを挿入していなかったので気づいた。

このissueには問題が記録されており、将来のリリースで解決する可能性があります。

+1

これは私にとってそれを解決しました。私は1時間以内に同じ問題を抱えていました。 –

関連する問題