Как установить страницу по умолчанию в 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
Я обнаружил, что мне нужно добавить атрибут enabled = "true" к тегу defaultDocument, то есть: <defaultDocument enabled = "true">
Джон Фергюсон

@JohnFerguson Приветствую вас.
Ник

2
Это должно быть помещено в тег <configuration> файла Web.config.
Mikaël Mayer

Будет ли это работать, если Default.aspx находится в другой папке? Например: <add value = "/ NewSite / default.aspx" />
Аполлон,

Также работает с IIS8.
WolFSharp 05

23

Совет № 84: Знаете ли вы… Как установить стартовую страницу для вашего веб-сайта в Visual Web Developer?

Просто щелкните правой кнопкой мыши страницу, которую вы хотите сделать стартовой, и произнесите «сделать стартовой страницей».

Как отмечено в комментарии ниже Адама Тюлипера - MSFT, это работает только для отладки, но не для развертывания.


1
Хм. Работает локально, но не после развертывания в лазурном состоянии.
Вивек Махарадж,

Принятый ответ не сработал для меня, но это сработало! Спасибо!
jnel899 06

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. Похоже на универсальное решение. Спасибо.
Tarik

Но вызовет ли это загрязнение HttpHandler?
Tarik

После вашего редактирования я должен сказать: ну, может быть. Думаю, простая вещь была бы такой 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>

Чтобы использовать проверку подлинности с помощью формы, следует ли мне использовать членство поставщиков или что-то еще? Я имею в виду, когда я просто выбираю Authentication Mode как Form, а не Windows, этот код будет работать прекрасно, верно?
Tarik

Я бы сказал, что это зависит от решения. Если вам нужно более сложное решение с разными профилями пользователей, вам следует использовать MembershipProviders. Но если это более простая настройка, вы можете просто использовать <allow users = "" /> и <deny users = "" />.
Zooking

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>


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.