2009-01-07 23 views
12

Mi documento predeterminado está en la subcarpeta no está en la raíz, ¿cómo puedo hacerlo predeterminado en el sitio web asp.net 2.0.asp.net documento predeterminado del sitio en la subcarpeta

Probé la configuración predeterminada del documento iis7 en '/pages/default.aspx' '~/pages/default.aspx' pero no funcionó.

+0

Si se encuentra que si intentas especificar un documento predeterminado como "subcarpeta/subcarpeta/archivo", el contenido se encontrará y se servirá, pero todos los enlaces se rompen porque el navegador web aún cree que está en la matriz original carpeta. La única forma de hacerlo correctamente es con un redireccionamiento HTTP, ya sea a través de JavaScript o a través de una respuesta del servidor web. La mejor manera de desencadenar una respuesta de redirección, IMO, es a través de una etiqueta de ubicación en web.config que desencadena una redirección solo para su documento predeterminado en la raíz, en lugar de activar la redirección para la carpeta como un todo. – Triynko

+0

Simplemente deje el archivo default.aspx en blanco en la carpeta raíz, y en su archivo web.config, haga la redirección específica a esa página con una etiqueta de "ubicación" como esta: ' ' – Triynko

Respuesta

15

El documento predeterminado no es lo mismo que la página de inicio. El documento predeterminado significa que si solicité mysite.com/somefolder y no especificó un archivo, qué archivo debe mostrar IIS.

Si desea utilizar una página específica como su página de inicio, crear un archivo Default.aspx y escribir esto en su clase de código subyacente:

public override void ProcessRequest(HttpContext context) { 
    context.Response.Redirect("pages/default.aspx", true); 
} 

A medida que el cliente haya desactivado el Javascript, un enfoque del lado del servidor sería más confiable Sin embargo, es mejor emitir un redireccionamiento permanente en lugar de un simple Response.Redirect. También hacerlo usando JS será malo desde un punto de vista SEO.

+0

Hacerlo por código es una tiempo de arrastre innecesario: una línea de JavaScript es todo lo que necesita. –

+0

Si desea evitar JS, una meta-actualización de HTML es otra solución fácil de solo HTML. –

+0

Esta es la solución correcta. El objetivo aquí no es activar la redirección http para una carpeta, sino garantizar que si las personas visitan esa carpeta, se redirigen a un documento específico en una subcarpeta. Como no se dirigieron a un documento específico, debe permitir que se invoque el documento predeterminado en la carpeta original (establecer un documento predeterminado como "subcarpeta/predeterminado.aspx" servirá el archivo pero romperá los enlaces, porque el navegador seguirá creo que está en la carpeta principal), y solo para ese documento predeterminado, haga que active una redirección. Aparte de JavaScript, esto es todo. – Triynko

2

Los documentos predeterminados son específicos de una subcarpeta; lo que intenta hacer no funcionará (directamente). Configure un archivo default.htm en la raíz y haga que se actualice a su "página de inicio" real.

La mejor pregunta que debe hacerse es cómo en la Tierra su página de inicio salió del directorio raíz.

8

No es necesario crear una página ficticia Default.aspx.

En el archivo Global.asax.cs, escribe lo siguiente:

public void Application_Start(object sender, EventArgs e) 
{ 
    var routeCollection = RouteTable.Routes; 
    routeCollection.MapPageRoute("DefaultRoute", string.Empty, "~/YourDesiredSubFolder/YourDesiredDocument.aspx"); 
} 

Explicación:

  • código Application_Start se garantiza la ejecución una vez y sólo una vez en el inicio de la aplicación.
  • La primera línea de código, obtiene una colección de rutas URL para su aplicación.
  • La segunda línea de código define una nueva ruta que apunta a su página interna en la subcarpeta que desea.
  • El segundo argumento está vacío para indicar que esta ruta se usa cuando no se solicita una página específica y no existe un documento predeterminado.
+0

En mi entorno de desarrollo (VS2015CE) RouteTable.Routes no es un tipo sino una propiedad, Así que es RouteTable.Routes .MapPageRoute (" DefaultRoute ", string.Empty," ~/YourDesiredSubFolder/YourDesiredDocument.aspx ") ; – Phoenix

Cuestiones relacionadas