我有一个相当大的 MVC Web 应用程序,我在每个控制器中重复一个操作,以查看客户是否已完成应用程序过程(在这种情况下,我会在他们的个人资料上设置一个标志,我会检查)。理想情况下,我想从每个操作方法中删除此代码,并将其应用于所有返回操作结果的操作方法。
问问题
381 次
2 回答
5
您可以创建一个自定义属性来为您处理此问题,您可以在 Controller 级别或 ActionResult 级别拥有该属性。
[CompletedApplication("User")]
public ActionResult YourAction
{
return View();
}
public class CompletedApplicationAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Your logic here
return true;
}
}
于 2013-09-24T07:34:13.023 回答
3
如果所有预期的控制器都从某个 BaseController 继承而不是使用它,则可以设置通用行为。
public class HomeController : BaseController
{
}
和 BaseContoller 会像
public class BaseController : Controller
{
protected BaseController(common DI)
{
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// some logic after action method get executed
base.OnActionExecuted(filterContext);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// some login before any action method get executed
string actionName = filterContext.RouteData.Values["action"].ToString(); // Index.en-US
filterContext.Controller.ViewBag.SomeFlage= true;
}
// If Project is in MVC 4 - AsyncContoller support,
//below method is called before any action method get called, Action Invoker
protected override IActionInvoker CreateActionInvoker()
{
return base.CreateActionInvoker();
}
}
于 2013-09-24T08:07:26.867 回答