我是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停止在内部响应。
请帮我解决这个问题。这种要求是否可行?
答案 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类中所指定。但是,您仍然可以在内部将用户导航到此操作方法。