2009-03-13 18 views
5

Abbiamo rilevato un problema durante la distribuzione dell'applicazione MVC sul server IIS7: qualsiasi route di navigazione dà errore 404. Ho trovato sul web che problema può essere risolto impostando pool di applicazioni gestite modalità pipeline per integrato, ma ora abbiamo eccezione:Problema di routing ASP MVC con IIS7

Request is not available in this context 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Request is not available in this context 

Source Error: 


Line 19: 
Line 20:   public override void SetActiveUser(Guid userOid) { 
Line 21:    FormsAuthentication.SignOut(); 
Line 22:    HttpContext.Current.Items[Key] = userOid.ToString(); 
Line 23:    FormsAuthentication.RedirectFromLoginPage(userOid.ToString(), true); 

Qualcuno ha qualche idea?

risposta

10

Il problema è probabilmente nel file web.config. Da IIS7 ora ci sono due posti per configurare gestori e moduli. Quando si esegue in modalità classica, è come eseguire su IIS 6 (anche se in IIS7).

Ecco il file di configurazione:

<system.web> 
[...] 
    <httpHandlers> 
      [...] 
     </httpHandlers> 
     <httpModules> 
      [...] 
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

     </httpModules> 
    </system.web> 

ci dovrebbe essere solo di IIS 6 configurazioni.

IIS 7 configurazione dovrebbe essere posto sotto:

<system.webServer> 
[...] 
      <modules runAllManagedModulesForAllRequests="true" > 
       <remove name="UrlRoutingModule"/> 
       <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      </modules> 
      <handlers> 
       <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
      </handlers> 
     </system.webServer> 
1

Per glom su quello che kvalcanti dichiarato. Il routing standard è stato progettato per IIS 7. Esiste un kludge aggiunto per le versioni precedenti di IIS. Quindi, se stai sviluppando versioni precedenti, hai la versione kludged up del file di configurazione. Cambiare la configurazione risolve il problema.

In aggiunta a ciò che cita kvalcanti, c'è la possibilità che tu abbia un po 'di kludge impostato nel tuo global.asax, pure. Non sono sicuro che sia ancora obbligatorio nella versione più recente di ASP.NET MVC, o no, dato che non ho ideato nulla se non Vista negli ultimi mesi.

Questo post ha qualche intuizione: http://www.developingfor.net/aspnet-mvc/deploying-aspnet-mvc-on-iis6.html

Scott Guthrie ha avuto un grande post su questo blog sul suo blog (http://weblogs.asp.net/scottgu/), ma io non ce l'ho nei segnalibri.