我在Session_OnStart()调用中的global.asax文件中进行了身份验证检查:
if (Session["Authenticated"] == null)
{
Response.Redirect("~/Login.aspx");
}
这种会话身份验证在我们所有的网络应用程序中紧密耦合,因此我必须以这种方式使用它。这个global.asax位于一个较旧的Webforms项目中,我的MVC项目就位于该项目中。因此我认为它允许我直接访问我的控制器操作,例如http://localhost/controller/action,而不会填充会话身份验证,即它不会重定向。我已经将这段代码添加到EACH控制器操作中来解决这个问题,但有没有办法在全局(而不是在global.asax中)设置它,这样我只需要为所有控制器操作调用一次?感谢。
答案 0 :(得分:6)
您应该创建一个所有控制器继承的基本控制器。然后你只需要在一个地方有逻辑。即:
public abstract class BaseController : ControllerBase
然后,您可以使用新BaseContoller中的initialize方法来执行常见逻辑。即。
[edit] - 更改为OnActionExecuting,而不是Initialize。这不是最优雅的地方,因为我们正处于被调用视图的尖端。然而,这是一个起点。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// you should be able to get session stuff here!!
base.OnActionExecuting(filterContext);
}
并在每个控制器中:
public class AnotherNormalController : BaseController