Come impostare la pagina predefinita in ASP.NET?


127

C'è qualche sezione o codice che ci consente di impostare la pagina predefinita in web.config?

Ad esempio, quando le persone visitano per la prima volta il mio sito Web, voglio che vedano CreateThing.aspxpiuttosto che Default.aspx.

Le soluzioni che già conosco:

  1. Mettete questa riga di codice => Response.Redirect("CreateThings.aspx")in Default.aspx Page_Loadevento, ma questo metodo è davvero ingenuo.

  2. Possiamo usare IIS (configurazione di pagina predefinita), ma voglio fare la stessa cosa sulla mia applicazione ASP.NET.

  3. Questa potrebbe essere un'altra soluzione per ora:

    <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>
    

Risposte:


239

Se si utilizza IIS 7 o IIS 7.5 è possibile utilizzare

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

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


5
Ho scoperto che dovevo aggiungere l'attributo enabled = "true" al tag defaultDocument ovvero: <defaultDocument enabled = "true">
John Ferguson,

@JohnFerguson Saluti per quello.
Nick,

2
Questo deve essere inserito nel tag <configuration> del file Web.config.
Mikaël Mayer,

Funzionerà se Default.aspx si trova in un'altra cartella? Ad esempio: <add value = "/ NewSite / default.aspx" />
Apollo

Funziona anche con IIS8.
WolFSharp,

23

Suggerimento n. 84: lo sapevi ... Come impostare una pagina iniziale per il tuo sito Web in Visual Web Developer?

Basta fare clic destro sulla pagina che si desidera essere la pagina iniziale e dire "imposta come pagina iniziale".

Come notato nel commento qui sotto di Adam Tuliper - MSFT, questo funziona solo per il debug, non per la distribuzione.


1
Hmm. Funziona localmente, ma non dopo averlo distribuito su azzurro.
Vivek Maharajh,

La risposta accettata non ha funzionato per me, ma ha funzionato! Grazie!
jnel899,

6
@vivekmaharajh non era l'impostazione predefinita perché è pensata per il test / debug - questa tecnica non configura il tuo server web solo il tuo ambiente di sviluppo.
Adam Tuliper - MSFT,

non aiuta il reindirizzamento quando gli utenti accedono alla directory stessa.
Malcolm Salvador,

9

Mappa default.aspx come HttpHandler percorso e reindirizzare a CreateThings.aspx dall'interno del HttpHandler.

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

Assicurarsi che Default.aspx non esista fisicamente nella radice dell'applicazione . Se esiste fisicamente, a HttpHandler non verrà data alcuna possibilità di esecuzione. Il file fisico sovrascrive il mapping di HttpHandler.

Inoltre puoi riutilizzarlo per pagine diverse da default.aspx.

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

//RedirectHandler.cs nel tuo 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
}

Quindi, quando si verifica una richiesta Default.aspx, il gestore reindirizzerà la richiesta CreateThing.aspx. Sembra una soluzione generica. Grazie.
Tarik,

Ma causerebbe l'inquinamento di HttpHandler?
Tarik,

Dopo la modifica, devo dire: beh, potrebbe essere. Penso che la cosa semplice sarebbe simile Application.Run(new Form()1):)
Tarik,

@Arron: puoi sempre creare una sezione di configurazione personalizzata che configurerà la tua HttpHandlerper varie richieste diverse. Puoi anche intercettare tutte le richieste * .aspx e vedere se la richiesta corrisponde a uno dei tuoi URL configurati. Altrimenti basta passarlo attraverso.
Robert Koritnik,

4

Se si utilizza l'autenticazione basata su moduli, è possibile provare il codice seguente:

<authentication mode="Forms">
<forms name=".FORM" loginUrl="Login.aspx" defaultUrl="CreateThings.aspx" protection="All" timeout="30" path="/"> 
</forms>
</authentication>

Per utilizzare l'autenticazione tramite modulo, è necessario utilizzare MemberShip o cose del provider? Voglio dire quando seleziono semplicemente la modalità di autenticazione come modulo anziché Windows, questo codice funzionerà in modo affascinante, giusto?
Tarik,

Direi che questo dipende dalla soluzione. Se hai bisogno di una soluzione più complessa con diversi profili utente, dovresti andare con MembershipProviders. Ma se si tratta di una configurazione più semplice, puoi semplicemente utilizzare <allow users = "" /> e <deny users = "" />.
Zooking il

3

se stai usando la pagina di accesso nel tuo sito web vai al file web.config

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

sostituisci il tag di autenticazione sopra (dove index.aspx sarà la tua pagina di avvio)

e un'altra cosa scrivilo nel tuo file web.config all'interno

<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>


1

Preferisco usare il seguente metodo:

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

1

Avevo fatto tutte le soluzioni di cui sopra ma non ha funzionato.

La mia pagina predefinita non era una pagina aspx, era una pagina html.

Questo articolo ha risolto il problema. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Fondamentalmente, nel mio file \ App_Start \ RouteConfig.cs, ho dovuto aggiungere una riga:

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 }
    );
}

Spero che questo aiuti qualcuno, mi ci è voluto un bel po 'per trovare la risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.