usar instalar example como .net architecture url-routing httphandler

.net - instalar - ¿Cómo obtener URLs limpias como Stack Overflow?



url rewrite forward (5)

En algunos sitios .NET, las URL no terminan con los nombres de las páginas asp.net, como default.aspx, sino que usan un patrón http://sitename.com o http://sitename.com/subdirectory/subdirectory . El sitio se asigna como subdirectorios de la raíz, es decir. / tags, / users, / badges, las URL serían / ​​tags, / users, / badges respectivamente.

Stack Overflow, para usar un ejemplo específico, usa las URL de pregunta del formulario ¿Cómo se obtienen las URL limpias como Stackoverflow? . Que es una gran manera de optimizar la página para los motores de búsqueda.

¿Se implementa esto utilizando controladores HTTP? ¿Se filtra la solicitud GET en función de la ruta y la respuesta completa se forma en el controlador en función de la pregunta id? ¿Alguien más quiere especular?


Es ASP.Net MVC, que tiene el enrutamiento .Net más o menos integrado. El enrutamiento también está disponible para proyectos que no son MVC.

http://msdn.microsoft.com/en-us/library/cc668201.aspx

Es solo un archivo .dll que puedes colocar en tu carpeta bin. Básicamente, utiliza expresiones regulares para hacer coincidir sus URL con las páginas / plantillas.



Las URL están en ese formato siguiendo los principios de REST en los que todo es un recurso con una URL única.

Creo que leí en algún lugar del blog que esto se logra mediante el uso de ASP.NET MVC framework .


Puedes hacerlo en ASP.net usando Context.RewritePath .

En Global.asax , cree un controlador de eventos Application.BeginRequest .

Por ejemplo, si quieres hacer peticiones de

example.com/questions

en realidad devolver los resultados de

example.com/Questions/Default.aspx

Global.asax :

<%@ Application Language="C#" %> <script runat="server"> void Application_BeginRequest(Object sender, EventArgs e) { string originalPath = HttpContext.Current.Request.Path.ToLower(); if (originalPath.Contains("/questions")) { String newPath = originalPath.Replace("/questions", "/Questions/Questions.aspx"); Context.RewritePath(newPath); } } </script>

Si su sitio web está ejecutando algo antes de .NET Framework 4, deberá activar manualmente runAllManagedModulesForAllRequests en web.config ; de lo contrario, el evento BeginRequest no se activará:

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


Sé que está utilizando el marco MVC de ASP.NET, que presumiblemente tiene un sistema de reescritura de URL incorporado. Para sistemas que no son de Windows, Apache mod_rewrite es muy común.

Por ejemplo, una página wiki: http://server.com/wiki/Main_Page request es manejada por el servidor web. Se ha traducido a /wiki/index.php?page=Main_Page

Aquí hay un ejemplo de reescritura de URL en Apache:

RewriteEngine on RewriteRule ^forum-([0-9]+)/.html$ forumdisplay.php?fid=$1 [L,QSA] RewriteRule ^forum-([0-9]+)-page-([0-9]+)/.html$ forumdisplay.php?fid=$1&page=$2 [L,QSA] RewriteRule ^thread-([0-9]+)/.html$ showthread.php?tid=$1 [L,QSA] RewriteRule ^thread-([0-9]+)-page-([0-9]+)/.html$ showthread.php?tid=$1&page=$2 [L,QSA]

Lo que esto dice es si la URL que viene es forum-##.html luego procesa esa solicitud como si fuera forumdisplay.php?fid=## . Lo mismo ocurre con el thread-##.html rules.