【问题标题】:MVC - Pass custom parameters to a custom action filterMVC - 将自定义参数传递给自定义操作过滤器
【发布时间】:2013-12-26 10:08:36
【问题描述】:

我的解决方案包含类库项目作为业务库,并且我在其中编写了一个自定义操作过滤器。

public class SampleFilterAttribute : ActionFilterAttribute, IExceptionFilter
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var parameters =filterContext.ActionDescriptor.GetParameters();
        var currentAction = filterContext.ActionDescriptor;
    }

我现在的要求是将一些其他参数传递给 OnActionExecuted 函数(如用户名,我将保存在数据库中的描述)。

我在 MVC 应用程序项目中的控制器操作如下所示:

 [SampleFilterAttribute]
    public ActionResult PurchaseRequisition(int? ID)
    {

那么如何将一些自定义参数传递给 OnActionExecuted() 动作过滤器?

【问题讨论】:

    标签: asp.net asp.net-mvc parameters class-library actionfilterattribute


    【解决方案1】:

    您可以通过TempData 将参数传递给您的自定义过滤器属性,见下文:

    SampleFilterAttribute

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            var actionDescriptor = filterContext.ActionDescriptor;
            var controllerName = actionDescriptor.ControllerDescriptor.ControllerName;
            var actionName = actionDescriptor.ActionName;
            var userName = filterContext.HttpContext.User.Identity.Name;
            var timeStamp = filterContext.HttpContext.Timestamp;
    
            var parameters = filterContext.RouteData.Values["id"]; 
            var description = filterContext.Controller.TempData["Description"];
    
            base.OnActionExecuted(filterContext);
        }
    

    动作

        [SampleFilter]
        public ActionResult PurchaseRequisition(int? id)
        {
            TempData["Description"] = "This is Description";
            return View();
        }
    

    【讨论】:

    • 谢谢林,虽然我现在可以使用 Tempdata[] 访问数据,但是我不能使用 filterContext.HttpContext.User.Identity.Name 或 filterContext.HttpContext.Timestamp,可能是因为我在单独的类项目中编写此代码。有什么建议吗?
    • 如果您的解决方案中有多个层,我建议您将自定义操作过滤器属性添加到您的 Web 层。创建一个名为“Helper”的文件夹,然后将所有自定义属性和扩展添加到该文件夹​​。直接应该和Controller和View一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多