检查每个页面请求的条件

时间:2010-10-14 18:30:38

标签: asp.net-mvc redirect

我有多租户ASP.NET MVC应用程序,它利用子域来确定当前租户。域是否有效是通过数据库表查找确定的。

哪里有一个检查域是否在数据库中的函数的最佳位置?如果子域不在数据库中,它应该重定向到Index中的Error操作控制器。

将检查放入Application_BeginRequest文件中的Global.asax方法不起作用,因为会产生永无止境的重定向。

2 个答案:

答案 0 :(得分:1)

  

哪里有一个检查域是否在数据库中的函数的最佳位置?如果子域不在数据库中,它应该重定向到Error控制器中的Index操作。

     

将检查放在Global.asax文件中的Application_BeginRequest方法中不起作用,因为会产生永无止境的重定向。

这是正确的地方,您只需要检查请求Url尚未/错误。

您可能已经这样做了,但我想补充一点,看起来非常静态的信息应该缓存而不是针对每个请求访问数据库。

答案 1 :(得分:0)

你可以继承actionFilter属性并覆盖onactionExecuting方法。在这种方法中,你可以进行任何数据库检查并适当地重定向用户

public class CustomActionFilterAttribute : ActionFilterAttribute
{
     public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if(DatabaseLookup)
        {
           return;
        }
        filterContext.Result = new RedirectResult("http://servername/Error");

    }

}

现在你可以使用这个自定义actionfilter属性

来修饰你的动作方法
[CustomActionFilter]
public ActionResult mymethod()
{
    //action method goes here
}