1

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はクライアントを使用しているときにそれを再作成することさえしません.

.exeVS の外部からコンパイルされたものから呼び出すと、同じエラーが発生します。

次に、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
4

1 に答える 1

1

次のリンクのティモシー・シールズによると

HttpClient BaseAddress が機能しないのはなぜですか?

BaseAddress の末尾にスラッシュを配置する必要があり、相対 URI の先頭にスラッシュを配置してはなりません

于 2016-12-14T02:30:57.703 に答える