¿Cómo configurar la página predeterminada en ASP.NET?

127

¿Hay alguna sección o código que nos permita configurar la página predeterminada web.config?

Por ejemplo, cuando las personas visitan mi sitio web por primera vez, quiero que vean en CreateThing.aspxlugar de hacerlo Default.aspx.

Las soluciones que ya conozco:

  1. Ponga esta línea de código => Response.Redirect("CreateThings.aspx")en el Default.aspx Page_Loadevento, pero este método es realmente ingenuo.

  2. Podemos usar IIS (configuración de página predeterminada), pero quiero hacer lo mismo en mi aplicación ASP.NET.

  3. Esta podría ser otra solución por ahora:

    <defaultDocument>
        <files>
            <clear />
            <add value="Default.aspx" />
            <add value="Default.htm" />
            <add value="Default.asp" />
            <add value="index.htm" />
            <add value="index.html" />
            <add value="iisstart.htm" />
        </files>
    </defaultDocument>
Tarik
fuente

Respuestas:

239

Si usa IIS 7 o IIS 7.5 puede usar

<system.webServer>
    <defaultDocument>
        <files>
            <clear />
            <add value="CreateThing.aspx" />
        </files>
    </defaultDocument>
</system.webServer>

https://docs.microsoft.com/en-us/iis/configuration/system.webServer/defaultDocument/

David Glenn
fuente
55
Descubrí que necesitaba agregar el atributo enabled = "true" a la etiqueta defaultDocument, es decir: <defaultDocument enabled = "true">
John Ferguson
@ John Ferguson Saludos por eso.
Nick
2
Esto se debe colocar en la etiqueta <configuration> del archivo Web.config.
Mikaël Mayer
¿Funcionará esto si Default.aspx está en otra carpeta? Por ejemplo: <add value = "/ NewSite / default.aspx" />
Apollo
Funciona con IIS8 también.
WolFSharp
23

Consejo # 84: ¿Sabía que ... cómo configurar una página de inicio para su sitio web en Visual Web Developer?

Simplemente haga clic derecho en la página que desea que sea la página de inicio y diga "establecer como página de inicio".

Como se señala en el comentario a continuación de Adam Tuliper - MSFT, esto solo funciona para la depuración, no para la implementación.

DavidTheDev
fuente
1
Hmm Funciona localmente, pero no después de implementarlo en azul.
Vivek Maharajh
La respuesta aceptada no funcionó para mí, ¡pero esto sí! ¡Gracias!
jnel899
66
@vivekmaharajh no era el valor predeterminado porque esto está destinado a pruebas / depuración: esta técnica no configura su servidor web solo su entorno de desarrollo.
Adam Tuliper - MSFT
no ayuda a redirigir cuando los usuarios acceden al directorio en sí.
Malcolm Salvador
9

Asigne default.aspx como ruta HttpHandler y redirija a CreateThings.aspx desde HttpHandler.

<add verb="GET" path="default.aspx" type="RedirectHandler"/>

Asegúrese de que Default.aspx no exista físicamente en la raíz de su aplicación . Si existe físicamente, el HttpHandler no tendrá ninguna posibilidad de ejecución. El archivo físico anula la asignación de HttpHandler.

Además, puede reutilizar esto para páginas que no sean default.aspx.

<add verb="GET" path="index.aspx" type="RedirectHandler"/>

//RedirectHandler.cs en tu App_Code

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

/// <summary>
/// Summary description for RedirectHandler
/// </summary>
public class RedirectHandler : IHttpHandler
{
    public RedirectHandler()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    #region IHttpHandler Members

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Redirect("CreateThings.aspx");
        context.Response.End();
    }

    #endregion
}
esta. __curious_geek
fuente
Entonces, usted dice que cada vez que ocurre una solicitud Default.aspx, el controlador redirigirá la solicitud a CreateThing.aspx. Parece una solución genérica. Gracias.
Tarik
¿Pero causaría la contaminación de HttpHandler?
Tarik
Después de su edición, necesito decir: Bueno, podría ser. Creo que la cosa simple sería Application.Run(new Form()1):)
Tarik
@Arron: Siempre puede crear una sección de configuración personalizada que configurará sus HttpHandlerdiferentes solicitudes. También puede capturar todas las solicitudes * .aspx y ver si la solicitud coincide con alguna de sus URL configuradas. De lo contrario, solo pásalo.
Robert Koritnik
4

Si está utilizando la autenticación de formularios, puede probar el siguiente código:

<authentication mode="Forms">
<forms name=".FORM" loginUrl="Login.aspx" defaultUrl="CreateThings.aspx" protection="All" timeout="30" path="/"> 
</forms>
</authentication>
Zooking
fuente
Para usar la autenticación de formulario, ¿debo usar los proveedores MembersShip o esas cosas? Quiero decir, cuando simplemente selecciono el Modo de autenticación como Formulario en lugar de Windows, este código funcionará de manera encantadora, ¿verdad?
Tarik
Yo diría que esto depende de la solución. Si necesita una solución más compleja con diferentes perfiles de usuario, entonces debe ir con MembershipProviders. Pero si se trata de una configuración más sencilla, puede usar <allow users = "" /> y <deny users = "" />.
Zoom
3

si está utilizando la página de inicio de sesión en su sitio web, vaya al archivo web.config

<authentication mode="Forms">
  <forms loginUrl="login.aspx" defaultUrl="index.aspx"  >
    </forms>
</authentication>

reemplace su etiqueta de autenticación de arriba (donde index.aspx será su página de inicio)

y una cosa más escribe esto en tu archivo web.config dentro

<configuration>
   <system.webServer>
   <defaultDocument>
    <files>
     <clear />
     <add value="index.aspx" />
    </files>
  </defaultDocument>
  </system.webServer>

  <location path="index.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
   </system.web>
  </location>
</configuration>
JD-V
fuente
3

Puede anular la configuración de documento predeterminada de IIS utilizando web.config

<system.webServer>
    <defaultDocument>
      <files>
        <clear />
        <add value="DefaultPageToBeSet.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

O utilizando el IIS, consulte el enlace de referencia http://www.iis.net/configreference/system.webserver/defaultdocument

Mahesh Malpani
fuente
1

Prefiero usar el siguiente método:

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
encriptado susurro
fuente
1

Había hecho todas las soluciones anteriores pero no funcionó.

Mi página predeterminada no era una página aspx, era una página html.

Este artículo resolvió el problema. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Básicamente, en mi archivo \ App_Start \ RouteConfig.cs, tuve que agregar una línea:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("");   // This was the line I had to add here!

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Espero que esto ayude a alguien, me tomó bastante tiempo encontrar la respuesta.

david wendelken
fuente