1

我在 VS 2013 NET4.5 上有工作代码。更新 NuGet 包(VS 2013,NET 4.5.1)后,出现此错误

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

附加信息:给定的过滤器实例必须实现以下一个或多个过滤器接口: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());
        }
    }
4

3 回答 3

1

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

于 2014-10-04T07:40:51.097 回答
1

您正在将 HttpFilter(WebAPI 过滤器)添加到 MVC 全局过滤器。您的过滤器应添加到 HttpFilterCollection

将此添加到 filterConfig.cs

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

这对 Global.ascx.cs:

FilterConfig.RegisterHttpFilters(GlobalConfiguration.Configuration.Filters);
于 2015-09-01T14:12:36.423 回答
0

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

更新

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

于 2013-10-26T02:38:56.293 回答