Home
私は、標準のVSプロジェクトテンプレート、つまりコントローラー、およびValues
多くのMVCクラフトからほぼ直接、小さなWeb APIを持っています。IIS 10 で実行およびデバッグするように設定されています。
Microsoft.AspNet.WebApi.Tracing
パッケージと次のコードを に追加して、トレースを設定しましたWebApiConfig
。
public static void Register(HttpConfiguration config)
{
config.EnableSystemDiagnosticsTracing();
SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = true;
traceWriter.MinimumLevel = TraceLevel.Debug;
config.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
...
...
}
SimpleTracer
は、ITraceWriter
テキスト ファイルに書き込む です。
VS エコシステムの外部、つまり Chrome の PostMan から API を呼び出すと、URL が正しくないため、404 エラー メッセージが表示され、トレース ファイルが存在しない場合は新しいトレース ファイルが作成されます。適切な URL を使用して PostMan から呼び出すと、期待どおりの結果が得られ、トレース ファイルに要求のトレースが記録されます。
コンソール アプリから呼び出すと、適切な URL を使用しても 404 エラー応答が返され、トレース ファイルには何も書き込まれません。.exe
私はそれを削除することで確認しました.IISはクライアントを使用しているときにそれを再作成することさえしません.
.exe
VS の外部からコンパイルされたものから呼び出すと、同じエラーが発生します。
次に、IIS Express を使用するように Web API を設定すると、すべてが完全に機能します。非 Web アプリケーションからの呼び出しには CORS が必要ですか? この場合、IIS には追加のヘッダーが必要ですか? なにが問題ですか?
編集 A:これは、PostMan を使用するときの要求であり、200 と予想される文字列のリストを返します。
GET /DemoApi/api/values HTTP/1.1
Host: localhost
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: f9454ffc-6a8d-e1ed-1a28-23ed8166e534
および応答とヘッダー:
["value1","value2","value3","value4","value5","value6","value7"]
Cache-Control →no-cache
Content-Length →64
Content-Type →application/json; charset=utf-8
Date →Tue, 13 Dec 2016 06:20:07 GMT
Expires →-1
Pragma →no-cache
Server →Microsoft-IIS/10.0
X-AspNet-Version →4.0.30319
X-Powered-By →ASP.NET
編集 B:これは、HttpClient を使用して送信された要求です。
GET http://abbeyofthelema/api/values HTTP/1.1
Accept: application/json
Host: abbeyofthelema
Connection: Keep-Alive
唯一の実際の違いは、Fiddler は localhost からのトラフィックをキャプチャしないため、代わりに自分のコンピューター名を使用する必要があったことです。同じ受信者が引き続き要求を受け取ります。
ここでの応答は次のとおりです。
HTTP/1.1 404 Not Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Tue, 13 Dec 2016 08:07:25 GMT
Content-Length: 4959