我有一个小的Web API,几乎直接来自标准的VS项目模板,即Home
和Values
控制器,以及许多MVC cruft。它设置为在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生态系统外部调用API时,即来自Chrome中的PostMan,一个错误的URL,导致404错误消息,以及创建新的跟踪文件(如果还没有)。我从PostMan用一个好的URL调用它,我得到预期的结果,并在跟踪文件中跟踪请求。
当我从我的控制台应用程序调用它时,即使有一个好的URL,我仍然会收到404错误响应,并且没有任何内容写入跟踪文件。我确保删除它,IIS在使用.exe
客户端时甚至不会重新创建它。
如果我从VS外部编译的.exe
中调用它,我会得到同样的错误。
然后,当我将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没有从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
答案 0 :(得分:1)
根据以下链接 Timothy Shields
Why is HttpClient BaseAddress not working?
您必须在BaseAddress的末尾放置斜杠,并且不得在相对URI的开头放置斜杠
希望它能帮上忙!