System.Web.Mvc.dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

时间:2013-10-22 18:58:30

标签: asp.net-mvc filter attributes

我在VS 2013 NET4.5上有代码。在更新(VS 2013,NET 4.5.1)的NuGet包后,我收到了此错误

  

发生了'System.InvalidOperationException'类型的异常   System.Web.Mvc.dll但未在用户代码中处理

     

附加信息:给定的过滤器实例必须实现一个   或更多以下过滤器接口:IAuthorizationFilter,   IActionFilter,IResultFilter,IExceptionFilter。

我确信我已经实现了 IActionFilter 界面,所以我怎么能得到这样的错误以及如何解决?

供参考:

public class WWWActionFilterAttribute : System.Web.Mvc.ActionFilterAttribute, System.Web.Mvc.IActionFilter
    {
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            System.Uri Address = filterContext.HttpContext.Request.Url;

            string[] domains = Address.Host.Split('.');

            if (domains.Length == 2)
            {
                System.UriBuilder AddressBuilder = new System.UriBuilder(Address);

                AddressBuilder.Host = string.Format("www.{0}", AddressBuilder.Host);

                filterContext.HttpContext.Response.Redirect(AddressBuilder.Uri.AbsoluteUri);
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }
        }
    }

配置

public class FilterConfig
    {
        public static void RegisterGlobalFilters(System.Web.Mvc.GlobalFilterCollection filters)
        {
            filters.Add(new System.Web.Mvc.HandleErrorAttribute());
            filters.Add(new TIKSN.HomeWebsite.Generalization.WWWActionFilterAttribute());
            filters.Add(new TIKSN.HomeWebsite.Globalization.LanguageActionFilterAttribute());
        }
    }

3 个答案:

答案 0 :(得分:1)

我们是否在谈论System.Web.Mvc.dll必须拥有保存版本,如果是这样的话?如果我将此DLL添加到我的域,我只能达到4.0版。但是我的web API中有一个版本5.1,带有web配置文件的项目。我真的不明白为什么我必须匹配这些版本以及为什么我的解决方案无法识别最高版本,如果这是它失败的原因。我相信Visual Studio 2013 Express会自动加载版本5.1,但我必须为域项目获取自己的版本而不提供5.1版本。关于MVC最糟糕的事情之一是依赖管理。

答案 1 :(得分:1)

您正在向MVC Global过滤器添加HttpFilter(WebAPI过滤器)。您的过滤器应添加到HttpFilterCollection

将其添加到filterConfig.cs

public static void RegisterHttpFilters(HttpFilterCollection filters)
{
    filters.Add(new WWWActionFilterAttribute());
}

这是Global.ascx.cs:

FilterConfig.RegisterHttpFilters(GlobalConfiguration.Configuration.Filters);

答案 2 :(得分:0)

这是因为 web.config 文件。您必须在那里指定包的确切版本。看here

<强>更新

在Web.config中,所有软件包都已注册,并具有其名称和版本对。 Web.config中的实际版本和版本不匹配。