Comment définir la page par défaut dans ASP.NET?

127

Y a-t-il une section ou un code qui nous permet de définir la page par défaut web.config?

Par exemple, lorsque les gens visitent mon site Web pour la première fois, je veux qu'ils voient CreateThing.aspxplutôt que Default.aspx.

Les solutions que je connais déjà:

  1. Mettez cette ligne de code => Response.Redirect("CreateThings.aspx")en Default.aspx Page_Loadévénement mais cette méthode est vraiment naïve.

  2. Nous pouvons utiliser IIS (configuration de page par défaut), mais je veux faire la même chose sur mon application ASP.NET.

  3. Cela pourrait être une autre solution pour le moment:

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

Réponses:

239

Si vous utilisez IIS 7 ou IIS 7.5, vous pouvez utiliser

<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
la source
5
J'ai trouvé que j'avais besoin d'ajouter l'attribut enabled = "true" à la balise defaultDocument, c'est-à-dire: <defaultDocument enabled = "true">
John Ferguson
@JohnFerguson Vive ça.
Nick
2
Ceci doit être placé dans la balise <configuration> du fichier Web.config.
Mikaël Mayer
Cela fonctionnera-t-il si Default.aspx se trouve dans un autre dossier? Par exemple: <add value = "/ NewSite / default.aspx" />
Apollo
Fonctionne également avec IIS8.
WolFSharp
23

Conseil n ° 84: Saviez-vous que… Comment définir une page de démarrage pour votre site Web dans Visual Web Developer?

Cliquez simplement avec le bouton droit de la souris sur la page que vous voulez être la page d'accueil et dites «définir comme page d'accueil».

Comme indiqué dans le commentaire ci-dessous par Adam Tuliper - MSFT, cela ne fonctionne que pour le débogage, pas pour le déploiement.

DavidTheDev
la source
1
Hmm. Fonctionne localement, mais pas après le déploiement sur Azure.
Vivek Maharajh
La réponse acceptée n'a pas fonctionné pour moi, mais cela a fonctionné! Merci!
jnel899
6
@vivekmaharajh ce n'était pas la valeur par défaut car elle est destinée aux tests / débogages - cette technique ne configure pas votre serveur Web uniquement votre environnement de développement.
Adam Tuliper - MSFT
n'aide pas à rediriger lorsque les utilisateurs accèdent au répertoire lui-même.
Malcolm Salvador
9

Mappez default.aspx comme route HttpHandler et redirigez vers CreateThings.aspx à partir de HttpHandler.

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

Assurez-vous que Default.aspx n'existe pas physiquement à la racine de votre application . S'il existe physiquement, HttpHandler n'aura aucune chance de s'exécuter. Le fichier physique remplace le mappage HttpHandler.

De plus, vous pouvez le réutiliser pour des pages autres que default.aspx.

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

//RedirectHandler.cs dans votre 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
}
ce. __curious_geek
la source
Ainsi, vous dites que chaque fois qu'une requête arrive Default.aspx, le gestionnaire redirige la requête vers CreateThing.aspx. Cela ressemble à une solution générique. Je vous remercie.
Tarik
Mais cela causerait-il une pollution HttpHandler?
Tarik
Après votre montage, j'ai besoin de dire: Eh bien, ça pourrait l'être. Je pense que la chose simple serait comme Application.Run(new Form()1):)
Tarik
@Arron: Vous pouvez toujours créer une section de configuration personnalisée qui configurera votre HttpHandlerpour différentes demandes différentes. Vous pouvez également intercepter toutes les requêtes * .aspx et voir si la requête correspond à l'une de vos URL configurées. Sinon, passez-le simplement.
Robert Koritnik
4

Si vous utilisez l'authentification par formulaire, vous pouvez essayer le code ci-dessous:

<authentication mode="Forms">
<forms name=".FORM" loginUrl="Login.aspx" defaultUrl="CreateThings.aspx" protection="All" timeout="30" path="/"> 
</forms>
</authentication>
Zooking
la source
Pour utiliser l'authentification par formulaire, dois-je utiliser les fournisseurs MemberShip ou autres? Je veux dire que lorsque je sélectionne simplement le mode d'authentification comme formulaire plutôt que Windows, ce code fonctionnera parfaitement, n'est-ce pas?
Tarik
Je dirais que cela dépend de la solution. Si vous avez besoin d'une solution plus complexe avec différents profils utilisateur, vous devriez opter pour MembershipProviders. Mais s'il s'agit d'une configuration plus simple, vous pouvez simplement utiliser <allow users = "" /> et <deny users = "" />.
Zooking
3

si vous utilisez la page de connexion de votre site Web, accédez au fichier web.config

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

remplacez votre balise d'authentification ci-dessus (où index.aspx sera votre page de démarrage)

et encore une chose, écrivez ceci dans votre fichier web.config à l'intérieur

<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
la source
3

Vous pouvez remplacer le paramètre de document par défaut IIS à l'aide de web.config

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

Ou en utilisant IIS, reportez-vous au lien pour référence http://www.iis.net/configreference/system.webserver/defaultdocument

Mahesh Malpani
la source
1

Je préfère utiliser la méthode suivante:

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
encryptedwhisper
la source
1

J'avais fait toutes les solutions ci-dessus mais cela n'a pas fonctionné.

Ma page par défaut n'était pas une page aspx, c'était une page html.

Cet article a résolu le problème. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

En gros, dans mon fichier \ App_Start \ RouteConfig.cs, j'ai dû ajouter une ligne:

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

J'espère que cela aide quelqu'un, il m'a fallu un bon moment pour trouver la réponse.

David Wendelken
la source