我有一个小的 Web API,几乎直接来自标准的 VS 项目模板,即Home
和Values
控制器,以及许多 MVC 杂物。它设置为在 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 错误响应,并且没有任何内容写入跟踪文件。我通过删除它来确保 IIS 在使用.exe
客户端时甚至不会重新创建它。
如果我.exe
从外部 VS 编译中调用它,我会得到同样的错误。
然后,当我将 Web API 设置为使用 IIS Express 时,一切正常。来自非 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 不从本地主机捕获流量,所以我不得不使用我的计算机名称。同一收件人仍会收到请求。
这里的回应是:
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