Estoy bastante seguro de que stackoverflow.com se ha creado con ASP.NET, pero no importa dónde haga clic, no veo la extensión .aspx en la barra de direcciones. ¿Cómo se hace y hay una razón particular para esto?¿Cómo ocultan los sitios .NET la extensión .aspx de sus archivos?
Respuesta
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.
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.
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.
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
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. –
... y esta llamada "naturaleza de ASP.NET MVC" en este caso es System.Web.Routing. –
Como otras personas han respondido, StackOverflow se genera utilizando ASP.NET MVC y ASP.NET MVC usa System.Web.Routing. Sin embargo System.Web.Routing no es parte de ASP.NET MVC, era RTMd con SP1, y significa que es posible usarlo sin ASP.NET MVC. Se puede ver cómo usarlo con WebForms aquí: http://haacked.com/archive/2008/03/11/using-routing-with-webforms.aspx y aquí: http://www.codeplex.com/ASPNET35Routing
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
¿por qué tantos downvotes? La pregunta específicamente preguntó por qué se hace esto? –
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>
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.
No probé este código completamente, así que ten cuidado.
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);
}
}
}
}
}
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");
}
}
- 1. ¿Los métodos de extensión ocultan las dependencias?
- 2. Tener URL sin extensión .aspx
- 3. Eliminar HTML o Extensión ASPX
- 4. URL de SiteCore sin la extensión .aspx
- 5. ¿Cómo ocultar la extensión (por ejemplo, .aspx) en la URL?
- 6. Cómo deshabilito las advertencias de los archivos Aspx (HTML, CSS)
- 7. Uso de la clase Build Manager para cargar archivos ASPX y llenar sus controles
- 8. Páginas web ASP.NET sin extensión de archivo aspx
- 9. ¿Podría abstraer sus consultas LINQ en los métodos de extensión
- 10. ¿Cómo mover todos los archivos con extensión específica de todos los subdirectorios a sus padres utilizando CMD?
- 11. ¿Cómo se ocultan los directorios de proyectos .git?
- 12. ¿Cómo se ocultan dinámicamente los campos de formulario en Django?
- 13. Valide todos los archivos ASPX, ASCX y HTML al compilar
- 14. agregar recursivamente la extensión de archivo a todos los archivos
- 15. ¿Cómo se organizan sus archivos de recursos?
- 16. ashx vs aspx para descarga de archivos
- 17. Visual Studio - ¿Por qué los archivos .ASPX tardan mucho más en cargarse que los archivos .ASPX.CS?
- 18. ¿Se supone que los constructores variados ocultan los generados implícitamente?
- 19. ¿Cómo encontrar todos los archivos con cierta extensión en Android?
- 20. ¿Cómo hacer que .gitignore ignore los archivos compilados sin extensión?
- 21. urls de sitios web sin extensión de archivo?
- 22. Texto sublime filtra los archivos con la extensión dada
- 23. extensión nativa .net para node.js
- 24. Cómo filtrar los archivos por extensión en NERDTree?
- 25. ¿Cómo maneja los archivos .config de .NET para aplicaciones grandes?
- 26. ¿Cómo se ocultan todas las imágenes con javascript?
- 27. ¿Cómo puedo obtener una lista de los sitios web en IIS desde una página ASPX usando C#?
- 28. ¿Cómo se está compilando aspx?
- 29. Cómo agregar REGION en Visual Studio en archivos aspx
- 30. ¿Cómo ejecuto una secuencia de comandos Perl en múltiples archivos de entrada con la misma extensión?
¿Pero por qué ocultar la extensión aspx? –
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
para que las páginas sean independientes del idioma. –