Як встановити сторінку за замовчуванням у ASP.NET?


127

Чи є якийсь розділ або код, який дозволяє нам встановлювати сторінку за замовчуванням web.config?

Наприклад, коли люди спочатку відвідати мій сайт, я хочу їх бачити , CreateThing.aspxа не Default.aspx.

Рішення, які я вже знаю:

  1. Покладіть цей рядок коду => Response.Redirect("CreateThings.aspx")у Default.aspx Page_Loadвипадку, але цей метод справді наївний.

  2. Ми можемо використовувати IIS (конфігурація сторінки за замовчуванням), але я хочу зробити те ж саме в моєму додатку ASP.NET.

  3. Наразі це може бути іншим рішенням:

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

Відповіді:


239

Якщо ви використовуєте IIS 7 або IIS 7.5, ви можете використовувати

<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
Я виявив, що мені потрібно додати атрибут enable = "true" до тегу defaultDocument, тобто: <defaultDocument enable = "true">
Джон Фергюсон

@JohnFerguson Привіт за це.
Нік

2
Це потрібно помістити в тег <configuration> файлу Web.config.
Mikaël Mayer

Чи буде це працювати, якщо Default.aspx знаходиться в іншій папці? Наприклад: <add value = "/ NewSite / default.aspx" />
Apollo

Працює і з IIS8.
WolFSharp

23

Порада № 84: Ви знали ... Як встановити стартову сторінку для свого веб-сайту у Visual Web Developer?

Просто клацніть правою кнопкою миші на сторінці, яку ви хочете стати початковою сторінкою, і скажіть "встановити як початкову сторінку".

Як зазначається у коментарі Адама Туліпера - MSFT нижче, це працює лише для налагодження, а не для розгортання.


1
Хм. Працює локально, але не після розгортання в лазурі.
Vivek Maharajh

Прийнята відповідь не працювала для мене, але це вдалося! Дякую!
jnel899

6
@vivekmaharajh це не було за замовчуванням, оскільки це призначено для тестування / налагодження - ця методика не налаштовує на ваш веб-сервер лише ваше середовище розробки.
Адам Туліпер - MSFT

не допомагає перенаправляти, коли користувачі отримують доступ до самого каталогу.
Малькольм Сальвадор

9

Відображайте default.aspx як маршрут HttpHandler і перенаправляйте на CreateThings.aspx зсередини HttpHandler.

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

Переконайтесь, що Default.aspx фізично не існує в корені програми . Якщо він існує фізично, HttpHandler не дасть жодного шансу виконати. Фізичний файл переосмислює відображення HttpHandler.

Крім того, ви можете повторно використовувати це для інших сторінок, ніж default.aspx.

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

//RedirectHandler.cs у коді 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
}

Отже, ви кажете, коли трапляється запит Default.aspx, обробник перенаправить запит на CreateThing.aspx. Це виглядає загальним рішенням. Дякую.
Тарік

Але чи спричинить це забруднення HttpHandler?
Тарік

Після Вашої редагування мені потрібно сказати: ну це могло бути. Я думаю, що просте було б так: Application.Run(new Form()1):)
Тарік

@Arron: Ви завжди можете створити спеціальний розділ конфігурації, який налаштовує ваші HttpHandlerдля різних запитів. Ви також можете вловити всі * .aspx запити і побачити, чи запит відповідає будь-якій із налаштованих вами URL-адрес. Інакше просто пропустіть це.
Роберт Коритник

4

Якщо ви використовуєте автентифікацію форм, ви можете спробувати код нижче:

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

Щоб використовувати автентифікацію форми, я повинен використовувати провайдерів MemberShip або інше? Я маю на увазі, коли я просто вибираю режим автентифікації як форму, а не Windows, цей код буде працювати чарівно правильно?
Тарік

Я б сказав, що це залежить від рішення. Якщо вам потрібно більш складне рішення з різними профілями користувачів, тоді вам слід скористатися MembershipProviders. Але якщо це більш проста установка, ви можете просто скористатися <дозволити користувачам = "" /> і <заборонити користувачам = "" />.
Наближається

3

якщо ви використовуєте сторінку входу на своєму веб-сайті, перейдіть до файлу web.config

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

замініть тег автентифікації вище (де index.aspx буде вашою сторінкою запуску)

і ще одна річ запишіть це у свій файл web.config всередині

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

3

Ви можете змінити налаштування документа за замовчуванням IIS за допомогою web.config

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

Або використовуючи IIS, перейдіть за посиланням для посилання http://www.iis.net/configreference/system.webserver/defaultdocument


1

Я вважаю за краще використовувати наступний метод:

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

1

Я зробив усі вищезазначені рішення, але це не спрацювало.

Моя сторінка за замовчуванням не була сторінкою aspx, це була HTML-сторінка.

Ця стаття вирішила проблему. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

В основному, у файлі \ App_Start \ RouteConfig.cs я повинен був додати рядок:

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

Сподіваюся, що це комусь допоможе, мені знадобилось відповісти, коли я знайшов відповідь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.