2011-04-20 25 views
5

Sto blanking e ho bisogno di una mano veloce. Google mi ha fallito. Sto lavorando per sostituire WCF/REST Starter Kit con ASP.NET MVC. Voglio fare la transizione il più indolore possibile, così sto cercando di creare un percorso che corrisponda al seguente URL:ASP.NET MVC 2 Problema - Dot in Route

http://localhost/services/MyService.svc/UserInfo 

ho creato il percorso in Global.asax.cs:

routes.MapRoute(
      "MyServiceDefault", 
      "services/MyService.svc/{action}/{id}", 
      new { 
        controller = "MyService", 
        action = "UserInfo", 
        id = UrlParameter.Optional 
       } 
     ); 

Presto mi sono reso conto che la richiesta non è nemmeno arrivata alla mia applicazione a causa dello . nella parte MyService.svc dell'URL.

Cosa mi manca per forzare la richiesta di passare alla mia applicazione anziché essere gestita dal server come risorsa statica?

Aggiornamento

ho dimenticato di dire che ho anche provato ad aggiungere quanto segue al web.config per inutilmente:

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

risposta

5

Si scopre che alla ricerca della combinazione corretta di termini alla fine produrrà risultati. Phil Haack ha in realtà un post di blocco su questo problema esatto:

Overriding a .svc Request With Routing

Si scopre che per l'estensione * .svc, semplicemente aggiungendo <httpRuntime relaxedUrlToFileSystemMapping="true" /> al web.config non è sufficiente.

In uno dei file framework Web.config, esiste un provider di build associato a * .svc che accetta la richiesta prima che arrivi a .NET MVC (e non riesce poiché questo non è realmente un servizio WCF) . Una volta che lo sai, è abbastanza facile rimuovere il provider di build nella web.config della tua app:

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
    <buildProviders> 
     <remove extension=".svc"/>    
    </buildProviders> 
    ... 
</system.web> 
+0

interessante. prenderò nota di questo. –

0

Date un'occhiata alla proprietà RouteCollection.RouteExistingFiles. Di default questo è impostato su falso. Potrebbe essere che il tuo servizio si trovi sotto il percorso Servizi nel tuo progetto e questo sta causando il problema.

+0

Anche se non ho una cartella Servizi, ho dato uno scatto in ogni caso. Senza fortuna. La mia app non riesce ancora a gestire il percorso. –

0

Questo article indica come è possibile utilizzare diverse estensioni con l'applicazione asp.net mvc e continuare a impostarle su .NET framework. in particolare prestare attenzione alla parte che inizia con

This is done using a script named registermvc.wsf. 
Problemi correlati