【问题标题】:How to set the Default Page in ASP.NET?如何在 ASP.NET 中设置默认页面?
【发布时间】:2010-12-27 03:36:44
【问题描述】:

是否有任何部分或代码允许我们在web.config 中设置默认页面?

例如,当人们第一次访问我的网站时,我希望他们看到 CreateThing.aspx 而不是 Default.aspx

我已经知道的解决方案:

  1. 把这行代码=>Response.Redirect("CreateThings.aspx")放到Default.aspxPage_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>
    

【问题讨论】:

    标签: asp.net iis-7 web-config


    【解决方案1】:

    如果使用 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/

    【讨论】:

    • 我发现我需要将 enabled="true" 属性添加到 defaultDocument 标签,即:
    • @JohnFerguson 为此干杯。
    • 这个要放在Web.config文件的标签中。
    • 如果 Default.aspx 在另一个文件夹中,这会起作用吗?例如:
    • 这对我不起作用,但 user1469363 的方式起作用了。如果这无论如何都不起作用,请尝试他的解决方案(非常简单/容易)
    【解决方案2】:

    Tip #84: Did you know… How to set a Start page for your Web Site in Visual Web Developer?

    只需右键单击要作为起始页的页面,然后说“设置为起始页”。

    正如 Adam Tuliper - MSFT 在下面的评论中所指出的,这仅适用于调试,不适用于部署。

    【讨论】:

    • 嗯。在本地工作,但不是在我部署到 azure 之后。
    • 接受的答案对我不起作用,但确实如此!谢谢!
    • @vivekmaharajh 这不是默认设置,因为这用于测试/调试 - 这种技术不会只配置您的 Web 服务器,而是配置您的开发环境。
    • 当用户访问目录本身时不会帮助重定向。
    【解决方案3】:

    将 default.aspx 映射为 HttpHandler 路由并从 HttpHandler 内重定向到 CreateThings.aspx。

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

    确保 Default.aspx 不存在 物理上位于您的应用程序根目录。 如果它在物理上存在 不会给 HttpHandler 任何 执行的机会。物理文件 覆盖 HttpHandler 映射。

    此外,您可以将其重新用于 default.aspx 以外的页面。

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

    //你的App_Code中的RedirectHandler.cs

    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。但如果这是一个更简单的设置,您可以只使用
    【解决方案5】:

    如果您在网站中使用登录页面,请转到 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>
    

    【讨论】:

      【解决方案6】:

      您可以使用 web.config 覆盖 IIS 默认文档设置

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

      或者使用IIS,参考链接http://www.iis.net/configreference/system.webserver/defaultdocument

      【讨论】:

        【解决方案7】:

        我已经完成了上述所有解决方案,但没有奏效。

        我的默认页面不是 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 }
            );
        }
        

        希望这对某人有所帮助,我花了很长时间才找到答案。

        【讨论】:

        • 我认为添加的代码仅适用于 MVC 应用程序。
        【解决方案8】:

        我更喜欢使用以下方法:

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

        【讨论】:

          猜你喜欢
          • 2013-08-02
          • 1970-01-01
          • 2014-12-06
          • 1970-01-01
          • 2012-04-19
          • 2021-12-29
          • 1970-01-01
          • 1970-01-01
          • 2018-08-28
          相关资源
          最近更新 更多