我有多租户ASP.NET MVC应用程序,它利用子域来确定当前租户。域是否有效是通过数据库表查找确定的。
哪里有一个检查域是否在数据库中的函数的最佳位置?如果子域不在数据库中,它应该重定向到Index
中的Error
操作控制器。
将检查放入Application_BeginRequest
文件中的Global.asax
方法不起作用,因为会产生永无止境的重定向。
答案 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
}