如何在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>

Answers:


239

如果使用IIS 7或IIS 7.5,则可以使用

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

https://docs.microsoft.com/zh-cn/iis/configuration/system.webServer/defaultDocument/


5
我发现我需要将enabled =“ true”属性添加到defaultDocument标记,即:<defaultDocument enabled =“ true”>
John Ferguson

@JohnFerguson为此欢呼。
尼克,

2
这将放置在Web.config文件的<configuration>标记中。
米卡·迈耶

如果Default.aspx在另一个文件夹中,这可以工作吗?例如:<add value =“ / NewSite / default.aspx” />
阿波罗

也可以与IIS8一起使用。
WolFSharp'3

23

提示#84:您知道吗……如何在Visual Web Developer中为您的网站设置起始页?

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

就像亚当·杜勒弗(Adam Tuliper)-MSFT在下面的评论中指出的那样,这仅适用于调试,不适用于部署。


1
嗯 在本地工作,但在部署到天蓝色后无法工作。
Vivek Maharajh 2015年

接受的答案对我不起作用,但确实如此!谢谢!
jnel899

6
@vivekmaharajh,这不是默认值,因为它是用于测试/调试的-这种技术不会仅在开发环境中配置Web服务器。
Adam Tuliper-MSFT

用户访问目录本身时无助于重定向。
马尔科姆·萨尔瓦多

9

将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):)
Tarik

@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。但是,如果它是更简单的设置,则可以使用<allow users =“” />和<deny users =“” />。
09年

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

希望这对某人有帮助,我花了好一会儿才找到答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.