2013-11-26 57 views
0

在我的ASP .Net应用程序(不是MVC,只是ASP .Net)我有几个Web表单,并且需要限制用户直接访问多个网页。ASP .Net Web.config

但是在从其他页面的应用程序链接和根据应用程序的功能,应该能够重定向(Response.Redirect或表单提交在后或获取方式)到这些页面,但严格地不直接输入到浏览器的URL并访问它们。

我已经在那些页面加载事件(在哪些需要限制直接访问)中尝试以下,并且工作得很好。

if (Request.UrlReferrer == null) 
{ 
    Response.Redirect("~/Index.aspx", true); 
} 

但我得到的问题是我对ASP.Net相对较新,不知道这是否是最好的方法来做到这一点。

1)。主要是我搜索,但需要知道我是否可以使用web.config文件完成此操作。如果是的话,将不胜感激,如果有人可以解释如何web.config文件应该做到这一点...

2)。另外我想重定向用户,如果他在站点托管的域名内输入错误的URL ...为此,我在web.config中执行了以下操作,但是想知道这是否正确。谢谢...

<customErrors mode="On" defaultRedirect="~/Index.aspx"> 
    <error statusCode="404" redirect="~/Index.aspx" /> 
</customErrors> 
+0

一般你会重定向到一个特定的“页面未找到”或“404错误”页面,而不是回到索引 - 这很可能会混淆用户,并被认为是“黑暗的做法”。见http://www.codinghorror.com/blog/2007/03/creating-user-friendly-404-pages.html。关于重定向问题,这应该有多安全?没有什么能够阻止用户使用JavaScript将他们自己从公共页面重定向到所谓的“安全”的用户,如果所有被检查的内容都是推介的存在。也许你应该考虑令牌? – pwdst

回答

2

您可以将它添加到你的web.config文件,以限制特定用户:

<authorization> 
<allow users="user1, user2"/> 
<deny users="?"/> 
</authorization> 

<location path="AccessDenied.aspx"> 
<system.web> 
<authorization> 
<allow users="*"/> 
</authorization> 
</system.web> 
</location> 

在你的C#中,可以使用Response.Redirect

protected void Application_EndRequest(Object sender, EventArgs e) 
{ 
    if (HttpContext.Current.Response.Status.StartsWith("401")) 
    { 
     HttpContext.Current.Response.ClearContent(); 
     Response.Redirect("AccessDenied.aspx"); 
    } 
}