2010-08-19 21 views
12

He implementado el enrutamiento de URL en ASP.NET 4.0 mediante la siguiente ruta.ASP.NET 4.0 URL de enrutamiento HTTP Error 404.0 - No encontrado

routes.MapPageRoute(
    "NewsDetails",    // Route name 
    "news/{i}/{*n}", // Route URL 
    "~/newsdetails.aspx"  // Web page to handle route 
    ); 

que me da URL como

http://www.mysie.com/news/1/this-is-test-news 

y esto está funcionando muy bien en mi localhost.

Pero cuando he subido en el servidor que da ...

Server Error 

404 - File or directory not found. 
The resource you are looking for might have been removed, had its name changed, 
or is temporarily unavailable. 

Si intento http://www.mysie.com/news/1/this-is-test-news.aspx A continuación, muestra la página.

¿Alguien tiene el mismo problema?

¿Cómo puedo configurar la URL http://www.mysie.com/news/1/this-is-test-news para trabajar en Windows Server 2008?

+0

es el archivo con la ruta en el mismo directorio que el de la página aspx? – XstreamINsanity

+0

no. mis archivos aspx están en carpeta raíz –

Respuesta

33

Para activar por defecto ASP.Net 4.0 enrutamiento con IIS 7.5:

  1. Asegúrese de que ha instalado la característica de redirección HTTP Se puede hacer -> Panel de control -> progams -> Apagar las características de windows -> World wide Web Services -> Características HTTP comunes -> HTTP redirección
  2. modificar su web.config con el código de abajo

 

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true">  
     <remove name="UrlRoutingModule"/> 
     <add name="UrlRoutingModule" 
      type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </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> 

3. crear rutas en el archivo de global.asax

Nota: Usted tiene que fijar grupo de aplicaciones a Asp.net 4.0 grupo de aplicaciones, como enrutamiento no está trabajando con Asp. net Classic 4.0 pool de aplicaciones.

Espero que esto ayude.

+0

Es esto realmente se supone que diga 'UrlRoutingHandler 2.0.0.0'? ¿Por qué no sería 4.0? – Maslow

+0

Esto funcionó para mí, pero yo no tenía necesidad de agregar el nodo UrlRoutingHandler. – Mike

+0

Awesome..worked como encanto :) –

1

He leído todas sus recetas, pero mi sitio web (ASP.NET 4.0 + VS2010 + Cassini) todavía no se enrutamiento correctamente.

La ruta virtual para mi sitio era "CompanyName.ApplicationName.Web". Cambié esto virtual a "MyApplicationName" y ¡voilá!

Cambio virtual configuración de ruta de la Cassini: Virtual Path

  • de Cassini -> Ctrl + W, P o;
  • Haga clic derecho en el sitio web y "Propiedades de la ventana".
+0

Muy contenta de haber encontrado esta respuesta! Estaba usando una ruta virtual que tenía un punto "." en eso. Después de cambiar mi ruta virtual de "mysite.com" a "mysite", funcionó todo mi enrutamiento personalizado. –

1

Mi solución, después de intentar todo:

Malo despliegue, un viejo PreCompiledApp.config estaba colgando alrededor de mi ubicación de despliegue, y haciendo todo lo que no funciona.

Mis ajustes finales que ha trabajado:

  • IIS 7.5, 64, Win2k8r2
  • grupo de aplicaciones de modo integrado
  • nada cambia en el web.config - esto significa que no hay controladores especiales para enrutamiento . Aquí está mi instantánea de las secciones de muchas otras publicaciones de referencia. Estoy usando FluorineFX, por lo que tiene que manejador añadió, pero no necesitará ningún otro:

    <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: (único método de cualquier 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 - esto logra una conversión automática http://andrew.arace.info/stackoverflow-http://andrew.arace.info/#stackoverflow que luego sería manejada por el 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; 
        } 
    } 
    
Cuestiones relacionadas