在Global.asax中,我如何拦截对任何操作/方法的所有调用但到某个区域的调用并将所有被阻止的调用重定向到错误页面?
答案 0 :(得分:0)
最简单的方法可能是更新路由,以便控制器是硬编码的,并且是URL模板的一部分,而不是使用可以使用任何控制器的默认路由。
如果您想要一个自定义错误页面而不是404,请添加另一个匹配任何内容的路由,并且还有一个硬编码控制器和操作。
您也可以在Application_BeginRequest中按URL过滤,但这可能比路由所需的两行代码更多。
答案 1 :(得分:0)
区域只是组织代码并分离出属于该区域的路由的好方法。有了这个说,你不一定要寻找某个区域,而是寻找与该区域内的动作相匹配的路线。因此,如果您有管理区域,则可能有以下路线:
context.MapRoute(
"AdminRoute",
"Admin/{controller}/{action}",
new { controller = "Admin", action = "Index" });
您知道这是一个管理区域路由,因为您应该知道哪些路由将在Admin区域控制器中调用这些操作。如果您想将此路线作为示例并重定向到错误页面,则可以使用通配符路线:
context.MapRoute(
"AdminErrorRoute",
"Admin/{*url}",
new { controller = "Error", action = "Error" });
这将采用以/ Admin开头的任何路由并将其重定向到错误页面。不确定为什么要将所有用户重定向到整个区域的错误页面。如果您只是想逐个用户,那么请考虑在控制器操作上使用属性过滤器来确定是否应该将用户重定向到错误页面。像这样:
[IsUserAdmin()]
public ActionResult Index() { .. }