У меня есть небольшой веб-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
, который записывает в текстовый файл.
Когда я вызываю API из-за пределов экосистемы VS, то есть из PostMan в Chrome, неверный URL-адрес приводит к сообщению об ошибке 404 и созданию нового файла трассировки, если его еще нет. Я вызываю его из PostMan с хорошим URL-адресом, я получаю ожидаемый результат и трассировку запроса в файле трассировки.
Когда я вызываю его из своего консольного приложения, даже с хорошим URL-адресом, я все равно получаю ответ об ошибке 404, и в файл трассировки ничего не записывается. Я убедился, удалив его, и IIS даже не создает его заново при использовании клиента .exe
.
Если я вызываю его из скомпилированного .exe
из-за пределов VS, я получаю ту же ошибку.
Затем, когда я настроил веб-API на использование IIS Express, все работает отлично. Нужен ли мне CORS для вызовов из не-веб-приложений, нужен ли в этом случае IIS дополнительный заголовок? Что не так?
EDIT 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
EDIT 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
HttpClient
, и опубликую их в ближайшее время. - person ProfK   schedule 13.12.2016client.BaseAddress = new Uri("http://localhost/webapi/");
, а затемHttpResponseMessage response = await client.GetAsync("api/values");
вместоclient.BaseAddress = new Uri("http://localhost/webapi");
иHttpResponseMessage response = await client.GetAsync("/api/values");
- person BNK   schedule 13.12.2016