2016-08-29 2 views
2

Я немного оглянулся и не наткнулся на что-либо похожее на проблему, с которой я сталкиваюсь, поэтому я подумал, что я брошу ее сюда и посмотрю, что, если что-то будет.Запрос WebAPI вызывает ошибку 404 ... по такому же запросу

У меня есть контроллер и способ.

public class BoothAPIController : ITApiControllerBase 
{ 
    [HttpGet] 
    public HttpResponseMessage GetActiveAssetNumbersLike([FromUri] String id) 
    { 
     HttpResponseMessage ret; 

     // ... do some processing 

     return ret; 
    } 
} 

Маршруты устанавливаются в Global.asax

protected void Application_Start(object sender, EventArgs e) 
{ 

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "CustomApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional }); 


    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "BoothWithDateAPI", 
      routeTemplate: "api/{controller}/{boothID}/{year}/{month}/{day}"); 

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }); 

} 

И эти два запроса выполнить безупречно ...

http://localhost:52211/api/BoothAPI/GetActiveAssetNumbersLike/PR 
http://localhost:52211/api/BoothAPI/GetActiveAssetNumbersLike/PRN0 

Это один однако ... возвращает ошибку 404. ..

http://localhost:52211/api/BoothAPI/GetActiveAssetNumbersLike/PRN 

Заголовок для не удалось запрос выглядит ...

Cache-Control →private 
Content-Length →2879 
Content-Type →text/html; charset=utf-8 
Date →Mon, 29 Aug 2016 12:53:08 GMT 
Server →Microsoft-IIS/8.0 
X-AspNet-Version →4.0.30319 
X-Powered-By →ASP.NET 
X-SourceFiles →= [string] 

Хотя успешные запросы выглядят как

Cache-Control →no-cache 
Content-Length →7731 
Content-Type →application/json; charset=utf-8 
Date →Mon, 29 Aug 2016 13:13:43 GMT 
Expires →-1 
Pragma →no-cache 
Server →Microsoft-IIS/8.0 
X-AspNet-Version →4.0.30319 
X-Powered-By →ASP.NET 
X-SourceFiles → [string] 

(пожимает) Я не знаю ... Я в полной растерянности, почему один изменение параметра делает разница.

+0

Я вижу разницу в Content-Type. Когда он терпит неудачу, он отправляет текст/html. Как вы отправляете эти запросы? С помощью приложения или через Postman? – jpgrassi

+0

Также, почему вы устанавливаете маршруты в Global.asax? У вас нет файла WebApiConfig в папке App_Start? – jpgrassi

+0

Запрос идентичен и отправляется из Postman, только строка параметров отличается. Что касается Global.asax ... на данный момент удобство. У меня не так много настроек, поэтому не нужно было его разрывать. По мере того, как приложение растет, мы можем немного его реорганизовать. –

ответ

2

Я немного поработал над этим и сам был удивлен. Выверните, что параметр, который вы пытаетесь отправить PRN зарезервированное слово в MS-DOS Device Driver

Ниже приведен список имен драйверов устройств по умолчанию.

список устройства PRN система, как правило, параллельный порт

Этот вопрос имеет ответ на вопрос: IIS gives 404 when MS-DOS reserved names are used in parameters values

Но вы должны быть осведомлены о потенциалах ловушек в установлении RelaxedUrlToFileSystemMapping к истине. См. Эту статью Scott Hanselman: Experiments in Wackiness: Allowing percents, angle-brackets, and other naughty things in the ASP.NET/IIS Request URL

+0

Спасибо, сэр! Это решило проблему, хотя я не могу себе представить, почему эти зарезервированные имена имеют НИЧЕГО делать с веб-службами ... –

+0

Они связаны с файловой системой. Ссылки, которые я подробно изложил, объясняют, почему. Одна вещь, чтобы учиться каждый день! – jpgrassi

Смежные вопросы