2016-08-29 7 views
2

Ich habe etwas herumschauen und stolperte nicht auf etwas ähnlich dem Problem, das ich erlebt, also dachte ich, ich würde es hier werfen und sehen, was, wenn etwas klebt.WebAPI Anfrage löst 404 Fehler ... auf die gleiche Anfrage

Ich habe eine Steuerung und Methode eingerichtet.

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

     // ... do some processing 

     return ret; 
    } 
} 

Die Routen sind in Global.asax einrichten

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 }); 

} 

Und diese beiden Anfragen ausführen einwandfrei ...

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

Dieses aber ... gibt einen 404-Fehler. ..

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

Die Kopfzeile für die fehlgeschlagene Anfrage sieht aus wie ...

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] 

Während die erfolgreichen Anforderungen aussehen

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] 

(Shrugs) Ich weiß nicht ... Ich bin bei einem vollständigen Verlust, warum die eine Änderung der Parameter a macht Unterschied.

+0

Ich sehe einen Unterschied auf den Content-Typ. Wenn es fehlschlägt, sendet es einen Text/HTML. Wie senden Sie diese Anfragen? Über eine Anwendung oder vielleicht über Postman? – jpgrassi

+0

Warum legen Sie auch die Routen in Global.asax fest? Haben Sie keine WebApiConfig-Datei in Ihrem App_Start-Ordner? – jpgrassi

+0

Die Anforderung ist identisch und wird von Postman gesendet, nur die Parameterzeichenfolge ist unterschiedlich. Soweit das Global.asax ... im Moment Bequemlichkeit. Ich habe nicht viel Konfiguration, also gab es keine Notwendigkeit, es zu lösen. Wenn die Anwendung wächst, können wir sie ein wenig umgestalten. –

Antwort

2

Ich habe ein wenig gegraben und war selbst überrascht. Herausstellen, dass der Parameter Sie versuchen PRN ist ein reserviertes Wort MS-DOS Device Driver

in Unten finden Sie eine Liste der Standard-Gerätetreibernamen wird zu senden.

PRN Systemliste Gerät, in der Regel eine parallele Schnittstelle

Diese Frage eine Antwort auf das Problem hat: IIS gives 404 when MS-DOS reserved names are used in parameters values

Aber Sie sollten bei der Festlegung RelaxedUrlToFileSystemMapping auf true der Potentiale Gefahren bewusst sein. Siehe diesen Artikel von Scott Hanselman: Experiments in Wackiness: Allowing percents, angle-brackets, and other naughty things in the ASP.NET/IIS Request URL

+0

Danke, mein Herr! Dies löste das Problem, obwohl ich mir nicht vorstellen kann, warum diese reservierten Namen irgendetwas mit Webdiensten zu tun haben ... –

+0

Sie sind mit dem Dateisystem verwandt. Die Links, die ich zur Verfügung gestellt habe, erklären im Detail, warum das so ist. Eine Sache, jeden Tag zu lernen! – jpgrassi

Verwandte Themen