如何在ASP.NET表单身份验证Web.Apps中显示默认页面

时间:2015-04-16 15:35:22

标签: c# asp.net iis default form-authentication

我想要实现的目标

我将index.html(default.html等)设置为ASP.NET Web应用程序中最常用的默认页面,并希望在用户设置没有页面名称的WebApp的URL时显示它。

我想,如果WebApp的网址类似于“http://www.somewhere.com/testApps/”,当您在浏览器的地址栏中设置它时,会显示index.html。

但是,如果Web应用程序使用表单身份验证,则它不起作用。

环境

  • 操作系统:Windows 7 Pro或Windows Server 2008
  • IIS服务器:IIS 7.5.7600
  • Web应用程序/ ASP.NET 4.0,ASP.NET 2.0

重现问题的方法

  1. 创建一个使用表单的简单ASP.NET Web应用程序 认证。 F.E. WebApp网址为“http://localhost/testApps/
  2. 制作一个简单的登录表单,用于发布身份验证票据 用户输入任何ID和密码,并将其设置为表单的登录表单 web.config中的身份验证。
  3. Default.aspx只是在文本框中显示页面名称,即 在Page_Load方法中设计。
  4. 创建一个Index.html,静态显示正文中的页面名称。
  5. 在web.config的最后部分设置以下条目。

                                       

  6. 到目前为止,当你设置'http://localhost/testApps/Index.html'时, 显示Index.html。但是当你设置'http://localhost/testApps/'时, 显示登录页面而不是Index.html


  7. 这就是全部。任何建议,建议,打击将不胜感激。

    谢谢。

3 个答案:

答案 0 :(得分:0)

将此添加到web.config以禁用此页面中的身份验证

<location path="index.html">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="yourcss.css">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

答案 1 :(得分:0)

我找到了解决方案

我已经改变了解决此问题的方法,并修改了global.asax中的AuthenticationRequest事件处理程序。

正如我所料,当我实现AuthenticationRequest事件处理程序时,很明显,只要调用WebApp的url withount页面就会调用它。 (f.e。&#39; http://localhost/testApps/&#39;)。当然,在默认页面出现相同的事件处理程序之前。

所以我在global.asax中实现了以下逻辑。


// bind custom method to authenctionrequest event handler.
public Global(): base()
{
    this.AuthenticateRequest += new EventHandler(this.MyAuthenticationRequest);
}

// the custom method
void MyAuthenticationRequest(object sender, EventArgs e)
{
    var myPage = HttpContext.Current.Request.Url.ToString();
    myPage = myPage.Replace(Request.Url.GetLeftPart(UriPartial.Path),
        String.Empty);
    if (String.IsNullOrEmpty(myPage))
    {
        if (Request.Cookies["started"] != null)
        {
            String flg = Request.Cookies["started"].Value;
            if (flg == "true")
            {
                return;
            }
        }
        Response.Cookies.Add(new HttpCookie("started", "true"));
        Response.Redirect("Index.html");
    }
}

Cookie&#39;已启动&#39; 已设置为即使&#39; Index.html&#39; igonred web.config的条目并再次请求表单身份验证。


通过这种方法,我可以显示&#39; Index.html&#39;当我在表单身份验证的情况下设置&#39; http://localhost/testApps/&#39;时。

这就是全部。谢谢。

答案 2 :(得分:0)

另一个终极解决方案。这是更容易和实用的方式。

在web.conf中设置以下条目

<urlMappings enabled="true">
<add url="~/" mappedUrl="~/Index.html" />
</urlMappings>

这两种方式都很好,但我自己推荐的方法很简单。

Tnanks。