tag route parameter net mvc data attribute asp all asp.net asp.net-mvc-3 iis-7 url-routing global-asax

route - Soporte de la ruta Url de ASP.NET MVC(punto)



mvc route attribute (5)

Agregue un UrlRoutingHandler a web.config. Sin embargo, esto requiere que su url sea un poco más específico (fe /Users/john.lee). Esto fuerza a cada url que comienza con / Users a tratarse como una url de MVC:

<system.webServer> <handlers> <add name="UrlRoutingHandler" type="System.Web.Routing.UrlRoutingHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" path="/Users/*" verb="GET"/> </handlers> </system.webServer>

Espero que puedas ayudarme con el siguiente problema.

Estoy usando ASP.NET MVC 3 en IIS7 y me gustaría que mi aplicación sea compatible con los nombres de usuario con puntos.

Ejemplo: http://localhost/john.lee

Así es como se ve mi Global.asax: ( http://localhost/ {username})

routes.MapRoute( "UserList", "{username}", new { controller = "Home", action = "ListAll" } );

Las aplicaciones funcionan cuando accedo a otras páginas, como http://localhost/john.lee/details etc.

Pero la página principal del usuario no funciona, me gustaría que la aplicación funcione como Facebook, donde http://www.facebook.com/john.lee es compatible.

Usé el código a continuación y no funcionó para mí:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

Pude usar el código a continuación y obtener la aplicación para aceptar puntos, pero definitivamente no me gustaría usar el código a continuación por muchas razones diferentes, por favor dime que hay una manera de superar este problema.

<modules runAllManagedModulesForAllRequests="false" />


Estaba enfrentando el mismo problema. Entonces la mejor solución para mí es:

<system.webServer> <modules runAllManagedModulesForAllRequests="true"></modules> <system.webServer>


No creo que el punto sea el problema aquí. AFAIK el único char que no debería estar en el nombre de usuario es a /

Sin ver la ruta que coincide con john.lee/details , es difícil decir lo que está mal, pero supongo que tiene otra ruta que coincide con la url, lo que impide que la ruta de los detalles del usuario coincida correctamente.

Recomiendo usar una herramienta como Glimpse para descubrir qué ruta se está combinando.


Para cualquiera que obtenga una excepción ''No se puede crear una clase abstracta'' cuando use el enfoque UrlRoutingHandler , es probable que se deba a:

  • Usar una ''ruta'' restringida (por ejemplo, path="/Files/*" ) en su declaración web.config, y
  • Una carpeta / ruta con el mismo nombre existe en su proyecto

Simplemente agregue esta sección a Web.config, y todas las solicitudes a la ruta / {* pathInfo} serán manejadas por el controlador especificado, incluso cuando haya puntos en pathInfo. (tomado del ejemplo ServiceStack MVC Host Web.config y esta respuesta https://.com/a/12151501/801189 )

Esto debería funcionar tanto para IIS 6 como para 7. Podría asignar manejadores específicos a diferentes rutas después de la ''ruta'' modificando path = "*" en elementos ''add''

<location path="route"> <system.web> <httpHandlers> <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" /> </httpHandlers> </system.web> <!-- Required for IIS 7.0 --> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> </location>