加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC 4动作过滤器问题

发布时间:2020-12-16 06:25:28 所属栏目:asp.Net 来源:网络整理
导读:我想创建一个过滤器并将其放在需要数据库访问的操作上.此过滤器将处理当前工作单元,因此我不需要在一个操作中手动调用它一次或多次. 我这样做: public class DisposeUnitOfWorkAttribute :FilterAttribute,IActionFilter { public TaskHttpResponseMessage
我想创建一个过滤器并将其放在需要数据库访问的操作上.此过滤器将处理当前工作单元,因此我不需要在一个操作中手动调用它一次或多次.
我这样做:

public class DisposeUnitOfWorkAttribute :FilterAttribute,IActionFilter
    {
        public Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext,CancellationToken cancellationToken,Func<Task<HttpResponseMessage>> continuation)
        {
            IUnitOfWork currentUnitOfWork = UnitOfWork.Current;
            if (currentUnitOfWork != null)
            {
                currentUnitOfWork.Dispose();
            }
            return null;
        }

        public bool AllowMultiple
        {
            get { return false; }
        }
    }


    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new DisposeUnitOfWorkAttribute());
            filters.Add(new HandleErrorAttribute());
        }
    }


        [DisposeUnitOfWork]
        public ViewResult Index()
        {            
            var user = _usersRepository.Get(x => x.Username == "jack").ToList();
            //UnitOfWork.Current.Dispose();
            return View();
        }

我得到异常:给定的过滤器实例必须实现以下一个或多个过滤器接口:IAuthorizationFilter,IActionFilter,IResultFilter,IExceptionFilter.

我怎么能纠正这个?

解决方法

根据您的代码判断,您尝试将过滤器用作Web API过滤器,但将其添加到FilterConfig.cs中的错误过滤器集合(类似MVC)

The given filter instance must implement one or more of the following filter interfaces: IAuthorizationFilter,IExceptionFilter.

您应该在WebApiConfig.cs中将过滤器添加到Web API全局过滤器集合:

public static void Register(HttpConfiguration config)
    {
        // Add custom global filters

        // Handle validation errors
        config.Filters.Add(new DisposeUnitOfWorkAttribute());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读