7

sto usando .net4.5rc con MVC4.0rcasp.net mvc non riceve la richiesta GET con un periodo in esso

Il codice qui sotto è tratto da un'applicazione WebAPI MVC, ma ho lo stesso comportamento è lì per reular mvc asp.net

il mio codice RegisterRoutes assomiglia a questo

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapHttpRoute(
       name: "R1", 
       routeTemplate: "product/{id}", 
       defaults: new { 
           controller="Product", 
           id = RouteParameter.Optional 

           } 
      ); 

questo funziona bene con Ids che non hanno un periodo in loro. Tuttavia quando chiedo un prodotto con un periodo in esso, la chiamata non sembra arrivare a ASP.NET

quando uso l'impostazione seguente come suggerito su post simili funziona quando c'è un trailing/ Ma esso non funziona senza di essa

in sintesi

http://mysite.com/product/AZ0  //works 
http://mysite.com/product/AZ.0/ //work with relaxedUrlToFileSystemMapping 
http://mysite.com/product/AZ.0 //does not work 

La risposta è 404 e credo che questo viene restituito da IIS senza coinvolgere ASP.NET. Quando eseguo routedebugger con un URL come l'ultimo di cui sopra, io non anche ottenere la roba routedebugger

Come faccio IIS per passare il controllo per ASP.NET quando c'è un URL con un motivo: mysite.com/product/{id} indipendentemente dal fatto che ci sia o meno un periodo nell'ID.

grazie.

risposta

7

Lasciatemi rispondere io stesso. Aggiunta di un URL Riscrivi risolve il problema. Il codice seguente aggiunto a web.config indica di riscrivere l'Url con un "/" finale se l'URL è del modulo (prodotto/.) Quindi non viene più gestito come un file ma gestito come normale MVC.

<system.webServer> 
    .... 
    <rewrite> 
     <rules> 
     <rule name="Add trailing slash" stopProcessing="true"> 
      <match url="(product/.*\..*[^/])$" /> 
      <action type="Rewrite" url="{R:1}/" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
Problemi correlati