Jak ustawić domyślną stronę w ASP.NET?


127

Czy jest jakaś sekcja lub kod, który pozwala nam ustawić domyślną stronę web.config?

Na przykład, kiedy ludzie po raz pierwszy odwiedzają moją witrynę, chcę, żeby to zobaczyli, CreateThing.aspxa nie Default.aspx.

Rozwiązania, które już znam:

  1. Umieść ten wiersz kodu => Response.Redirect("CreateThings.aspx")w Default.aspx Page_Loadzdarzeniu, ale ta metoda jest naprawdę naiwna.

  2. Możemy używać IIS (domyślna konfiguracja strony), ale chcę zrobić to samo w mojej aplikacji ASP.NET.

  3. Na razie może to być inne rozwiązanie:

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

Odpowiedzi:


239

W przypadku korzystania z usług IIS 7 lub IIS 7.5 można użyć

<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
Zauważyłem, że muszę dodać atrybut enabled = "true" do tagu defaultDocument, tj .: <defaultDocument enabled = "true">
John Ferguson

@JohnFerguson Pozdrawiam.
Nick

2
Należy to umieścić w tagu <configuration> pliku Web.config.
Mikaël Mayer

Czy to zadziała, jeśli plik Default.aspx znajduje się w innym folderze? Na przykład: <add value = "/ NewSite / default.aspx" />
Apollo,

Działa również z IIS8.
WolFSharp

23

Wskazówka # 84: Czy wiesz, że… Jak ustawić stronę początkową dla swojej witryny sieci Web w programie Visual Web Developer?

Po prostu kliknij prawym przyciskiem myszy stronę, która ma być stroną startową i powiedz „ustaw jako stronę startową”.

Jak zauważył w poniższym komentarzu Adama Tulipera - MSFT, działa to tylko w przypadku debugowania, a nie wdrażania.


1
Hmm. Działa lokalnie, ale nie po wdrożeniu do Azure.
Vivek Maharajh

Przyjęta odpowiedź nie zadziałała dla mnie, ale tak się stało! Dzięki!
jnel899,

6
@vivekmaharajh nie było to ustawienie domyślne, ponieważ jest przeznaczone do testowania / debugowania - ta technika nie konfiguruje serwera WWW tylko środowiska programistycznego.
Adam Tuliper - MSFT

nie pomaga przekierowywać, gdy użytkownicy uzyskują dostęp do samego katalogu.
Malcolm Salvador

9

Zamapuj default.aspx jako trasę HttpHandler i przekieruj do CreateThings.aspx z poziomu HttpHandler.

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

Upewnij się, że plik Default.aspx nie istnieje fizycznie w katalogu głównym aplikacji . Jeśli istnieje fizycznie, HttpHandler nie będzie miał żadnej szansy na wykonanie. Plik fizyczny zastępuje mapowanie HttpHandler.

Ponadto możesz ponownie użyć tego dla stron innych niż default.aspx.

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

//RedirectHandler.cs w swoim 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
}

Więc mówisz, że kiedykolwiek zdarzy się żądanie Default.aspx, program obsługi przekieruje żądanie do CreateThing.aspx. Wygląda na ogólne rozwiązanie. Dziękuję Ci.
Tarik

Ale czy spowodowałoby to zanieczyszczenie HttpHandler?
Tarik

Po twojej edycji muszę powiedzieć: Cóż, może być. Myślę, że prosta rzecz byłaby taka Application.Run(new Form()1):)
Tarik

@Arron: Zawsze możesz utworzyć niestandardową sekcję konfiguracji, która skonfiguruje twoją HttpHandlerdla różnych różnych żądań. Możesz także przechwycić wszystkie żądania * .aspx i sprawdzić, czy żądanie pasuje do któregokolwiek ze skonfigurowanych adresów URL. W przeciwnym razie po prostu przepuść.
Robert Koritnik

4

Jeśli korzystasz z uwierzytelniania za pomocą formularzy, możesz wypróbować poniższy kod:

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

Aby korzystać z uwierzytelniania formularza, czy powinienem używać członkostwa dostawcy, czy rzeczy? Mam na myśli, że kiedy po prostu wybieram tryb uwierzytelniania jako formularz zamiast Windows, ten kod będzie działał uroczo, prawda?
Tarik

Powiedziałbym, że to zależy od rozwiązania. Jeśli potrzebujesz bardziej złożonego rozwiązania z różnymi profilami użytkowników, powinieneś skorzystać z MembershipProviders. Ale jeśli jest to prostsza konfiguracja, możesz po prostu użyć <allow users = "" /> i <deny users = "" />.
Zooking

3

jeśli korzystasz ze strony logowania w swojej witrynie, przejdź do pliku web.config

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

zamień swój znacznik uwierzytelniający na powyższy (gdzie index.aspx będzie Twoją stroną startową)

i jeszcze jedno, zapisz to w swoim pliku web.config wewnątrz

<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

Wolę skorzystać z następującej metody:

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

1

Zrobiłem wszystkie powyższe rozwiązania, ale nie zadziałało.

Moja strona domyślna nie była stroną aspx, była to strona html.

Ten artykuł rozwiązał problem. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Zasadniczo w moim pliku \ App_Start \ RouteConfig.cs musiałem dodać linię:

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

Mam nadzieję, że to komuś pomoże. Znalezienie odpowiedzi zajęło mi sporo czasu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.