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>
    
Tarik
źródło

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/

David Glenn
źródło
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.

DavidTheDev
źródło
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
}
to. __curious_geek
źródło
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>
Zooking
źródło
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>
JD-V
źródło
3

Możesz zastąpić domyślne ustawienie dokumentu usług IIS przy użyciu pliku web.config

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

Lub korzystając z usług IIS, skorzystaj z łącza http://www.iis.net/configreference/system.webserver/defaultdocument

Mahesh Malpani
źródło
1

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

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
zaszyfrowany szept
źródło
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.

david wendelken
źródło