2016-05-03 6 views
2

Wir haben einen Web-API-Dienst ausgeführt, der das Attribut-Routing verwendet. Wenn eine Anfrage mit der Route gesendet wird, die keine Dateierweiterung enthält, wird sie an die richtige Aktion weitergeleitet, die die Abfragezeichenfolge richtig auswertet. Wenn wir eine Route haben, die eine Dateierweiterung enthält, wenn Sie vor der Abfragekennung kein '/' einfügen, wird 404 nicht gefunden.Warum geben meine Anforderungen mit Dateierweiterungen 404 zurück, wenn der Schrägstrich vor der Abfragekennung weggelassen wird?

Zum Beispiel:

Arbeits:

https://example/api/interview/test/70ac327a-d77b-41da-bf9c-76af8efdfbbaf/Test.docx/?format=Unspecified

nicht gefunden:

https://example/api/interview/test/70ac327a-d77b-41da-bf9c-76af8efdfbbaf/Test.docx?format=Unspecified

Es ist wahrscheinlich auch erwähnenswert, dass die Route Parameter mit der Dateierweiterung ist optional .

Ein Beispiel Route ist:

[HttpPost] 
[Route("api/HDCS/Interview/{subscriberId}/{packageId}/{templatename?}")] 
public IHttpActionResult Interview(string subscriberId, string packageId, string format = null, 
    [FromUri] IEnumerable<string> markedVariables = null, string templatename = null, 
    bool encodeFileNames = false, string retrieveFromHub = null){...} 

Edit:

Sorry, ich sollte auch erwähnt haben, dass wir

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 
</system.webServer> 

in unserem web.config

Antwort

2

Ich habe didn‘ t eine sehr wichtige Information bei der Erläuterung unserer API enthalten, die zur Behebung dieses Problems benötigt wurde . Wir verwenden OWIN und um sicherzustellen, dass das OWIN Modul tatsächlich die mit Erweiterungen URL geht in die Route auf WebAPI mussten wir unsere Startup.cs Datei hinzuzufügen:

 builder.UseWebApi(config); 
     builder.UseStageMarker(PipelineStage.MapHandler); // this line 

Dies das Problem behoben hat, und wir bekommen nicht mehr 404 Jahren, als Verwenden Sie die in der Frage angegebene Route.

Quelle für fix: https://github.com/domaindrivendev/Swashbuckle/issues/57