Asp.net mvc 基本控制器

Asp.net mvc 基本控制器,asp.net-mvc,controller,Asp.net Mvc,Controller,我有一个ApplicationController,应用程序中的每个控制器都继承它 public abstract class ApplicationController : Controller public class HomeController : ApplicationController public class AnnouncementController : ApplicationController 我的应用程序(IntraNet)也使用Windows身份验证并提取当前用户的

我有一个ApplicationController,应用程序中的每个控制器都继承它

public abstract class ApplicationController : Controller
public class HomeController : ApplicationController
public class AnnouncementController : ApplicationController
我的应用程序(IntraNet)也使用Windows身份验证并提取当前用户的域登录名。当用户的登录名不包含站点id时,我需要控制器在下拉列表中显示一个视图,最好是一个带有站点列表的小弹出窗口,供用户选择

问题1:是否应该在ApplicationController中实现此功能,以便所有派生类都不需要实现此检查?如果是,在派生类实例化期间如何调用此方法?当前ApplicationController仅包含构造函数,不包含其他方法。
问题2:如何在用户会话期间使用会话和其他类型的持久化存储持久化此选定的站点id


谢谢

如果每次调用都需要进行此检查,我将创建一个属性并用它装饰基本控制器类。请确保也使用
AttributeUsage
装饰新属性,以便在所有继承控制器上调用它

[AttributeUsage (AttributeTargets.All, Inherited = true)]
public CheckStuffAttribute : ActionFilterAttribute
{
    // This is one method you can override to get access
    // to everything going on before any actions are executed.
    public override void OnActionExecuting (ActionExecutingContext filterContext)
    {
        // Do your checks, or whatever you need, here
    }
}

...

[CheckStuff]
public abstract class ApplicationController : Controller { ... }
至于第二个问题,您可以在基类上创建将会话用作其后备存储的属性

[CheckStuff]
public abstract class ApplicationController : Controller
{
    public string DataToKeepAlive
    {
        get { return (string)Session["MyKey"]; }
        set { Session["MyKey"] = value; }
    }
}

将属性公开将使您的自定义属性能够访问这些属性。

如何使用新属性在ApplicationController中返回视图结果?您可以在属性中设置ActionResult(例如重定向到登录或404页面),也可以像平常一样使用您的操作。不过,我需要更多的上下文和细节来真正回答这个问题。我需要的是,当用户的Windows登录名不包含“XYZ”时,是否显示一个包含用户要选择的所有站点名称的视图页面或JSON?我不知道如何在ApplicationController类中执行操作,以及如何从派生类调用它。谢谢。好的,您可以创建一个检查每个传入请求并相应重定向的,或者您可以使用一个自定义属性(如我发布的)来修饰基类,该属性覆盖
OnActionExecuting
。使用该属性,可以强制重定向到一个操作,该操作根据用户的身份执行您所说的操作。如果您需要有关属性的更多帮助,请告诉我,我可以发布更多代码。