Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC:jQuery地址阻止用户导航到直接Url_Jquery_Asp.net Mvc_Ajax_Jquery Address - Fatal编程技术网

ASP.NET MVC:jQuery地址阻止用户导航到直接Url

ASP.NET MVC:jQuery地址阻止用户导航到直接Url,jquery,asp.net-mvc,ajax,jquery-address,Jquery,Asp.net Mvc,Ajax,Jquery Address,我们正在开发一个Ajax应用程序,并利用jQuery地址插件加载应用程序的各个页面,因此我们网站的URL看起来像:www.app.com#/SomeController/SomeAction。导航到这样的url会加载应用程序的默认路由,然后使用jQuery地址将SomeController/SomeAction url加载到页面上的div中 问题是,用户仍然可以通过在浏览器中键入url直接访问www.app.com/SomeController/SomeAction(无哈希符号)。我们如何防止用

我们正在开发一个Ajax应用程序,并利用jQuery地址插件加载应用程序的各个页面,因此我们网站的URL看起来像:www.app.com#/SomeController/SomeAction。导航到这样的url会加载应用程序的默认路由,然后使用jQuery地址将SomeController/SomeAction url加载到页面上的div中


问题是,用户仍然可以通过在浏览器中键入url直接访问www.app.com/SomeController/SomeAction(无哈希符号)。我们如何防止用户直接访问页面,并要求他们在页面中添加哈希符号,以确保页面通过Ajax请求加载?

您可以创建一个选中request.isajaxrequest()的筛选器。除了默认路由之外,您将拒绝任何不在默认路由上的请求


我不确定这是否是最好的方法。

在默认路线之前创建要添加的路线,如下所示:

routes.MapRoute(
    "404 non-hashed",
    "{*fullPath}",
    new { controller = "Error", action = "Show404" },
    new { fullPath = @"^(?!#).+" }
);
此路由将处理任何不以哈希字符开头的请求。任何以散列字符开头的请求都将无法通过路由约束,并将转到默认路由


创建一个控制器和动作来显示404页面,或者一些自定义错误页面,然后就可以设置了

Councellorben是正确的,您可以使用路由技巧来限制合法客户端或应用程序请求特定资源的方式,但您永远无法保护自己免受伪造(使用fiddler或其他工具)。counsellorben提出的方法只在潜在地避免用户混淆和限制应用程序的“API”区域时有用。当然,你不应该有一个只依赖深度链接的应用程序,因为这会导致搜索引擎优化等方面的问题。但这是一个不同的讨论

另一种方法,而不是过滤器,可以将以下内容添加到操作方法中

if (this.HttpContext.Request.IsAjaxRequest() != true)
            return RedirectToAction("Index");

这里的标准做法是给锚定一个空或伪href属性,并让click事件执行AJAX回调?这样,如果用户复制了超链接,他将自动获得正确的URL。

另请参见。感谢您的评论。我完全同意这可能导致的SEO问题,但所有这些页面都不会被机器人抓取,因为用户必须通过身份验证才能访问应用程序。