У меня есть небольшой веб-API, почти непосредственно из стандартного шаблона проекта VS, т. Е. Home
и Values
контроллеров и много крутизны MVC. Он установлен для запуска и отладки под IIS 10.Почему мой веб-API возвращает 404 на всех ресурсах при вызове из приложения консоли?
Я настроил отслеживание, добавив пакет 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-интерфейс Web для использования 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
Единственное реальное отличие заключается в том, что из-за Скрипач Безразлично» t захватить трафик с 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
404 заявляет, что служба не найдена, что означает, что никто не прослушивает адрес/порт. Может быть что-то в вашей тестовой среде.Если вы не используете самостоятельный хостинг, служба должна быть развернута в IIS, чтобы вы могли позвонить службе. Здесь вы должны дважды проверить порт, на котором он запущен. – Michael
Можете ли вы опубликовать полный HTTP-запрос и ответ, включая заголовки? – matcheek
@ Майкл Я знаю, что такое 404, и я цитирую себя из вопроса: «Из [или] я называю это из PostMan с хорошим URL-адресом **, я получаю ожидаемый результат ** ...». Я могу * * never ** получить ожидаемый результат, когда API неправильно настроен и прослушивается в IIS. – ProfK