2008-10-21 221 views

Respuesta

25

En el caso de stackoverflow, utilizan ASP.NET MVC en lugar de formularios web ASP.NET. Con los formularios web, la url apunta a un archivo en su disco, mientras que MVC apunta a una acción del controlador. Si está utilizando formularios web, querrá utilizar la reescritura de URL. Scott Guthrie tiene un good article al hacer la reescritura de URL.

+0

¿Pero por qué ocultar la extensión aspx? –

+8

Es un detalle de implementación; no hay ningún motivo en particular para exponer a la interfaz pública; Las URL son más bonitas y fáciles de transferir a través de reading-out-the-phone-net sin él, o 'cgi', o '.php', o ... – bobince

+0

para que las páginas sean independientes del idioma. –

3

Puede hacer esto y más con la reescritura de ISAPI (para IIS). Te permite crear URLs amigables sin todas las cadenas de consulta feas. Da a los usuarios una interfaz más amigable y puede hacer que tu contenido sea más fácil de buscar.

Si está utilizando Apache, use mod_rewrite.

La premisa básica de ambos es que toman una URL amigable (como la que ves para este sitio), luego la transforman usando una serie de reglas (típicamente expresiones regulares que especifiques) para URL internas o cadenas de consulta que se entienden fácilmente por el código.

Un ejemplo sería que convierten posts/edit/<postnumber> en editPost.aspx?postNumber=<postnumber> utilizando una regla de transformación.

16

Este sitio utiliza el marco de MVC de ASP.NET y el mapa de URL para enrutar las páginas no físicas. La ruta pasa al controlador que luego decide cómo mostrar la página.

9

Lo más probable es que su hecho por la reescritura de URL ...

El servidor web está tomando direcciones URL como los de la barra de direcciones del navegador & repointing a las páginas ASPX detrás de las escenas

Esto puede ser hecho en un módulo HTTP .NET o como una ISAPI en IIS Handler

de Scott Guthrie tiene un buen artículo en su sitio sobre la reescritura de URL

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

+0

Tiene razón en que la URL "limpia" se puede lograr con la reescritura de URL en ASP.NET. Sin embargo, en este caso particular (stackoverflow.com) las URL se realizan por naturaleza del marco ASP.NET MVC. –

+0

... y esta llamada "naturaleza de ASP.NET MVC" en este caso es System.Web.Routing. –

-3

y por lo que una razón:

  • puede cambiar la tecnología (digo PHP) sin URL indexadas o marcados romper
  • sus URL son más 'REST'ful y corresponden a los recursos y no sólo un archivo
  • puede recordar una URL o leerlo a alguien por teléfono con mayor facilidad
+0

¿por qué tantos downvotes? La pregunta específicamente preguntó por qué se hace esto? –

4

puede lograr modificando su archivo web.config.

<configuration> 
<system.webserver> 
<rewrite> 
    <rules> 
      <rule name="RemoveASPX" enabled="true" stopProcessing="true"> 
       <match url="(.*)\.aspx" /> 
       <action type="Redirect" url="{R:1}" /> 
      </rule> 
      <rule name="AddASPX" enabled="true"> 
       <match url=".*" negate="false" /> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
        <add input="{URL}" pattern="(.*)\.(.*)" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="{R:0}.aspx" /> 
      </rule> 
    </rules> 
</rewrite> 
</system.webserver> 
</configuration> 
0

El siguiente código funciona bien, siempre y cuando las páginas .aspx, .ashx se encuentran en la carpeta de aplicación. La prioridad es resolver primero la página .aspx y luego .ashx.

Por ejemplo, si prueba localhost/AppFolder/Time, intentará resolver localhost/AppFolder/Time.aspx, y si no se encuentra, entonces localhost/AppFolder/Time.ashx.

P.S.

  1. No probé este código completamente, así que ten cuidado.

  2. No tiene en cuenta las carpetas que pueden tener los archivos .aspx, por lo que, si se intenta acceder a la página/PhysicalApplicationPath/myfolder /, que no va a resolver a /PhysicalApplicationPath/MYFOLDER/page.aspx.

Código:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.SessionState; 

namespace NameSpace 
{ 
    public class Global : System.Web.HttpApplication 
    { 
     private void mapearUrlAmigaveis() 
     { 
      String url = Request.Path.ToString().ToLower(); 
      int positionQuestionMarkParameter = url.IndexOf('?'); 

      String urlSemParametros = (positionQuestionMarkParameter != -1) ? url.Substring(0, (positionQuestionMarkParameter - 1)) : url; 
      String[] splitBarra = urlSemParametros.Split('/'); 
      int indexOfUltimaBarra = urlSemParametros.LastIndexOf('/'); 

      if (splitBarra.Length > 0) 
      { 
       String ultimaBarra = splitBarra[(splitBarra.Length - 1)]; 
       String caminhoLocalUltimaBarra = Request.PhysicalApplicationPath + ultimaBarra; 
       String parametros = ((positionQuestionMarkParameter != -1) ? url.Substring((positionQuestionMarkParameter - 1), (url.Length - 1)) : String.Empty); 
       if (System.IO.File.Exists(caminhoLocalUltimaBarra + ".aspx")) 
       { 
        Context.RewritePath(urlSemParametros + ".aspx" + parametros); 
       } 
       else if (System.IO.File.Exists(caminhoLocalUltimaBarra + ".ashx")) 
       { 
        Context.RewritePath(urlSemParametros + ".ashx" + parametros); 
       } 
      } 
     } 
    } 
} 
0

Usted puede hacer esto en C# .NET para utilizar una extensión personalizada en su URL en ASP.NET.

Deje que ".recon" en el código sea su extensión personalizada. (es decir, reemplace ".recon" a su propia extensión)

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpApplication app = sender as HttpApplication; 
    if (app.Request.Path.ToLower().IndexOf(".recon") > 0) 
    { 
     string rawpath = app.Request.Path; 
     string path = rawpath.Substring(0, rawpath.IndexOf(".recon")); 
     app.Context.RewritePath(path+".aspx"); 
    } 
} 
Cuestiones relacionadas