2011-04-15 20 views
8

Ho creato regole di routing nella mia applicazione ASP.NET e sulla mia macchina di sviluppo su IIS7 tutto funziona correttamente. Quando distribuisco la soluzione al server prod che ha anche IIS7 ottengo l'errore 404 (pagina non trovata) durante l'accesso all'URL. Forse qualcuno potrebbe indicare dov'è il problema?Errore HTTP di routing 404.0 0x80070002

errore effettivo

Errore HTTP 404.0 - Not Found La risorsa siete alla ricerca di è stato rimossa, il nome cambiato, o è temporaneamente non disponibile. Dettagliata Errore InformationModule IIS Web Nucleo Notifica MapRequestHandler Handler StaticFile Codice errore 0x80070002 URL richiesto http://xxx.xxx.xxx.xxx:80/pdf-button fisica Percorso C: \ www \ pathtoproject \ pdf-tasto di accesso Metodo Accesso anonimo utente anonimo

mio Actual Codice

 <add key="RoutePages" value="all,-forum/"/> 

      UrlRewrite.Init(ConfigurationManager.AppSettings["RoutePages"]); 


    public static class UrlRewrite 
    { 
      public static void Init(string routePages) 
      { 

       _routePages = routePages.ToLower().Split(new[] { ',' }); 
       RegisterRoute(RouteTable.Routes); 




      } 

      static void RegisterRoute(RouteCollection routes) 
      { 

       routes.Ignore("{resource}.axd/{*pathInfo}"); 
       routes.Ignore("favicon.ico"); 
       foreach (string routePages in _routePages) 
       { 
        if (routePages == "all") 
         routes.MapPageRoute(routePages, "{filename}", "~/{filename}.aspx"); 
        else 
         if (routePages.StartsWith("-")) 
          routes.Ignore(routePages.Replace("-", "")); 
         else 
         { 
          var routePagesNoExt = routePages.Replace(".aspx", ""); 
          routes.MapPageRoute(routePagesNoExt, routePagesNoExt, string.Format("~/{0}.aspx", routePagesNoExt)); 
         } 
       } 

      } 
} 
+0

quale tipo di percorso utilizzato? MVC? –

+0

Uso la classe System.Web.Routing.RouteCollection (.NET 4.0) – Tomas

+0

Che cosa ti aspetti che venga instradato a - pdf-button.aspx? Sono sicuro che hai realizzato 0x80070002 = ERROR_FILE_NOT_FOUND – Rup

risposta

23

Appena trovato che le linee di seguito devono essere aggiunti al file web.config, ora tutto funziona bene anche sul server Prod.

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" > 
     <remove name="UrlRoutingModule"/>  
    </modules> 
    </system.webServer> 
+0

runAllManagedModulesForAllRequests = "true" da solo ha svolto il lavoro, ma la soluzione fornita da Robert Bethge è anche migliore. –

2

La mia soluzione, dopo aver provato tutto:

Bad distribuzione, un vecchio PreCompiledApp.config era appeso in giro per la mia posizione Deploy, e fare tutto ciò che non funziona.

mie impostazioni finali che ha funzionato:

  • IIS 7.5, Win2k8r2 x64,
  • integrato pool di applicazioni in modalità
  • nulla cambia nel web.config - questo significa nessun gestore speciali per il routing . Ecco la mia istantanea delle sezioni su molti altri post di riferimento. Sto utilizzando FluorineFX, così io ho tale gestore ha aggiunto, ma non ho bisogno di tutti gli altri:

    <system.web> 
        <compilation debug="true" targetFramework="4.0" /> 
        <authentication mode="None"/> 
    
        <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> 
        <httpRuntime requestPathInvalidCharacters=""/> 
    
        <httpModules> 
        <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/> 
        </httpModules> 
    </system.web> 
        <system.webServer> 
        <!-- Modules for IIS 7.0 Integrated mode --> 
        <modules> 
         <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" /> 
        </modules> 
    
        <!-- Disable detection of IIS 6.0/Classic mode ASP.NET configuration --> 
        <validation validateIntegratedModeConfiguration="false" /> 
        </system.webServer> 
    
  • Global.ashx: (unico metodo di qualsiasi nota)

    void Application_Start(object sender, EventArgs e) { 
        // Register routes... 
        System.Web.Routing.Route echoRoute = new System.Web.Routing.Route(
          "{*message}", 
         //the default value for the message 
          new System.Web.Routing.RouteValueDictionary() { { "message", "" } }, 
         //any regular expression restrictions (i.e. @"[^\d].{4,}" means "does not start with number, at least 4 chars 
          new System.Web.Routing.RouteValueDictionary() { { "message", @"[^\d].{4,}" } }, 
          new TestRoute.Handlers.PassthroughRouteHandler() 
         ); 
    
        System.Web.Routing.RouteTable.Routes.Add(echoRoute); 
    } 
    
  • PassthroughRouteHandler cs - questo ottiene una conversione automatica da http://andrew.arace.info/stackoverflow a http://andrew.arace.info/#stackoverflow che sarà poi gestito dal default.aspx:

    public class PassthroughRouteHandler : IRouteHandler { 
    
        public IHttpHandler GetHttpHandler(RequestContext requestContext) { 
         HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"]; 
         requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true); 
         return null; 
        } 
    } 
    
+0

Hai salvato la giornata con le informazioni PrecompiledApp.config. :-) Molte grazie. – ekimpl

0

Deseleziona questo in Windows Explorer.

"estensioni di file Nascondi per i tipi noti"

8

La soluzione suggerita

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" > 
    <remove name="UrlRoutingModule"/>  
    </modules> 
</system.webServer> 

opere, ma può degradare le prestazioni e può anche causare errori, perché ora tutti i moduli HTTP registrato eseguito su ogni richiesta, non solo le richieste gestite (ad esempio .aspx). Questo significa che i moduli verranno eseguiti su ogni .jpg .gif css .html .pdf ecc

Una soluzione più ragionevole è quella di includere questo nel vostro web.config:

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 

di credito per la sua va a Colin Farr. Controlla il suo post su questo argomento allo http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html.

1

Il problema per me era un nuovo server che System.Web.Routing era della versione 3.5 mentre web.config richiedeva la versione 4.0.0.0. La risoluzione era

% WINDIR% \ Framework \ v4.0.30319 \ aspnet_regiis -i

% WINDIR% \ Framework64 \ v4.0.30319 \ aspnet_regiis -i

0

Avendo questo in Global.asax.cs risolto per me.

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
     } 
Problemi correlati