如何阻止用户在asp.net应用程序中查看受限页面

时间:2016-09-22 12:39:30

标签: asp.net asp.net-mvc-4

我是Asp.net的新手,我对此并不了解。我有一个查询。

我的dotnet应用程序网址为http://www.example.com

对于我网站的内部行为,我会在http://www.example.com/net/afk/xyz上发送请求,并在网页上显示回复。此路径未显示在Web浏览器URL上。它只显示http://www.example.com/page

但我的问题是,如果有人在我的应用程序登录后直接将http://www.example.com/net/afk/xyz输入到网络浏览器中,那么这也会打开,用户可以看到我想要显示的所有信息。

我想要一些东西 - 网址http://www.example.com/net/afk/xyz应该在内部工作,但无法通过网络浏览器网址启动。

我尝试在IIS中输入一些拒绝的规则作为net \ afk,但对于那些,我的网址http://www.example.com/net/afk/xyz停止在内部响应。

请帮我解决这个问题。这种要求是否可行?

2 个答案:

答案 0 :(得分:0)

据我了解您的问题,如果您希望您的网页不应该由网址直接打开,那么您可以通过这种方式进行操作

Uri u = HttpContext.Current.Request.UrlReferrer;
        if (u != null)
            return true;
        else
        {
            //Here user try to hit your Page url directly
            //Then you can redirect that user to your default Page or Home Page
            return false;
        }

答案 1 :(得分:0)

所以基本上你需要的是阻止用户直接访问url。这可以通过使用mvc的属性来实现,这些属性可以应用于控制器,操作方法等。因此,您将创建一个NoDirectAccessAttribute,以防止用户导航到操作方法。

using System;
using System.Web.Mvc;
using System.Web.Routing;

namespace TestProject
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class NoDirectAccessAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Request.UrlReferrer == null ||
                        filterContext.HttpContext.Request.Url.Host != filterContext.HttpContext.Request.UrlReferrer.Host)
            {
                filterContext.Result = new RedirectToRouteResult(new
                               RouteValueDictionary(new { controller = "Home", action = "Index", area = "" }));
            }
        }
    }
}

这可以应用于您的操作方法,如下所示:

[NoDirectAccess]
public ActionResult xyz()
{
    return View();
}

如果用户尝试访问此操作方法,则会将其重新路由到主页,如NoDirectAccessAttribute类中所指定。但是,您仍然可以在内部将用户导航到此操作方法。