Wie lege ich die Standardseite in ASP.NET fest?

127

Gibt es einen Abschnitt oder Code, mit dem wir die Standardseite festlegen können web.config?

Wenn zum Beispiel Leute meine Website zum ersten Mal besuchen, möchte ich, dass sie sie sehen CreateThing.aspxund nicht Default.aspx.

Die Lösungen, die ich bereits kenne:

  1. Setzen Sie diese Codezeile => Response.Redirect("CreateThings.aspx")in Default.aspx Page_Loadevent, aber diese Methode ist wirklich naiv.

  2. Wir können IIS (Standard-Seitenkonfiguration) verwenden, aber ich möchte dasselbe in meiner ASP.NET-Anwendung tun.

  3. Dies könnte vorerst eine andere Lösung sein:

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

Antworten:

239

Wenn Sie IIS 7 oder IIS 7.5 verwenden, können Sie verwenden

<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
quelle
5
Ich fand, dass ich das Attribut enabled = "true" zum Tag defaultDocument hinzufügen musste, dh: <defaultDocument enabled = "true">
John Ferguson
@ JohnFerguson Prost dafür.
Nick
2
Dies ist in das <configuration> -Tag der Datei Web.config einzufügen.
Mikaël Mayer
Funktioniert dies, wenn sich die Datei Default.aspx in einem anderen Ordner befindet? Zum Beispiel: <add value = "/ NewSite / default.aspx" />
Apollo
Funktioniert auch mit IIS8.
WolFSharp
23

Tipp Nr. 84: Wussten Sie, wie Sie in Visual Web Developer eine Startseite für Ihre Website einrichten?

Klicken Sie einfach mit der rechten Maustaste auf die Seite, die Sie als Startseite verwenden möchten, und sagen Sie "Als Startseite festlegen".

Wie im folgenden Kommentar von Adam Tuliper - MSFT erwähnt, funktioniert dies nur für das Debuggen, nicht für die Bereitstellung.

DavidTheDev
quelle
1
Hmm. Funktioniert lokal, jedoch nicht nach der Bereitstellung in Azure.
Vivek Maharajh
Die akzeptierte Antwort hat bei mir nicht funktioniert, aber das hat funktioniert! Vielen Dank!
jnel899
6
@vivekmaharajh es war nicht die Standardeinstellung, da dies zum Testen / Debuggen gedacht ist - diese Technik konfiguriert Ihren Webserver nicht nur Ihre Entwicklungsumgebung.
Adam Tuliper - MSFT
hilft nicht bei der Umleitung, wenn Benutzer auf das Verzeichnis selbst zugreifen.
Malcolm Salvador
9

Ordnen Sie default.aspx als HttpHandler- Route zu und leiten Sie sie im HttpHandler zu CreateThings.aspx um.

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

Stellen Sie sicher, dass Default.aspx nicht physisch in Ihrem Anwendungsstamm vorhanden ist . Wenn es physisch existiert, erhält der HttpHandler keine Chance zur Ausführung. Die physische Datei überschreibt die HttpHandler-Zuordnung.

Darüber hinaus können Sie dies für andere Seiten als default.aspx wiederverwenden.

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

//RedirectHandler.cs in Ihrem 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
}
Dies. __curious_geek
quelle
Sie sagen also, wann immer eine Anfrage passiert Default.aspx, leitet der Handler die Anfrage an weiter CreateThing.aspx. Es sieht nach einer generischen Lösung aus. Danke dir.
Tarik
Aber würde es eine HttpHandler-Verschmutzung verursachen?
Tarik
Nach Ihrer Bearbeitung muss ich sagen: Nun, es könnte sein. Ich denke, die einfache Sache wäre wie Application.Run(new Form()1):)
Tarik
@Arron: Sie können jederzeit einen benutzerdefinierten Konfigurationsabschnitt erstellen, der Ihre HttpHandlerfür verschiedene Anforderungen konfiguriert . Sie können auch alle * .aspx-Anforderungen abfangen und prüfen, ob die Anforderung mit einer Ihrer konfigurierten URLs übereinstimmt. Ansonsten einfach durchgehen.
Robert Koritnik
4

Wenn Sie die Formularauthentifizierung verwenden, können Sie den folgenden Code ausprobieren:

<authentication mode="Forms">
<forms name=".FORM" loginUrl="Login.aspx" defaultUrl="CreateThings.aspx" protection="All" timeout="30" path="/"> 
</forms>
</authentication>
Zooking
quelle
Sollte ich zur Verwendung der Formularauthentifizierung die Provider MemberShip oder ähnliches verwenden? Ich meine, wenn ich einfach den Authentifizierungsmodus als Formular anstelle von Windows auswähle, funktioniert dieser Code auf charmante Weise, oder?
Tarik
Ich würde sagen, dass dies von der Lösung abhängt. Wenn Sie eine komplexere Lösung mit unterschiedlichen Benutzerprofilen benötigen, sollten Sie sich für MembershipProviders entscheiden. Wenn es sich jedoch um eine einfachere Einrichtung handelt, können Sie einfach <allow users = "" /> und <verweigern users = "" /> verwenden.
Zooking
3

Wenn Sie eine Anmeldeseite auf Ihrer Website verwenden, gehen Sie zur Datei web.config

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

Ersetzen Sie Ihr Authentifizierungs-Tag nach oben (wobei index.aspx Ihre Startseite ist).

und noch etwas schreiben Sie dies in Ihre web.config-Datei hinein

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

Sie können die IIS-Standarddokumenteinstellung mithilfe der Datei web.config überschreiben

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

Oder verwenden Sie den IIS unter dem Link http://www.iis.net/configreference/system.webserver/defaultdocument

Mahesh Malpani
quelle
1

Ich bevorzuge die folgende Methode:

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
verschlüsseltes Flüstern
quelle
1

Ich hatte alle oben genannten Lösungen durchgeführt, aber es funktionierte nicht.

Meine Standardseite war keine Aspx-Seite, sondern eine HTML-Seite.

Dieser Artikel hat das Problem gelöst. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Grundsätzlich musste ich in meiner Datei \ App_Start \ RouteConfig.cs eine Zeile hinzufügen:

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

Ich hoffe, das hilft jemandem. Ich habe eine Weile gebraucht, um die Antwort zu finden.

David Wendelken
quelle