2013-10-22 37 views
1

我在VS 2013 NET4.5上有工作代碼。更新(VS 2013,NET 4.5.1)的NuGet包後,我得到這個錯誤在System.Web.Mvc.dll中發生類型'System.InvalidOperationException'的異常,但未在用戶代碼中處理

「System.InvalidOperationException」類型發生在 System.Web.Mvc.dll程序的一個例外,但在用戶代碼中沒有處理

其他信息:給定的過濾器實例必須實現一個 或多個以下濾波器接口:個IAuthorizationFilter, IActionFilter,IResultFilter,個IExceptionFilter。

我相信,我實現IActionFilter接口,所以我怎麼能得到錯誤像這樣,我該如何解決?

FYI:

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()); 
     } 
    } 

回答

0

這是因爲的web.config文件。你必須指定軟件包的確切版本。看here

更新

在web.config中所有的包都註冊,並有自己的名稱和版本對。 Web.config中的實際版本和版本不匹配。

+0

能幫你在你的Web改變什麼更具體的.config來獲得這個工作? –

+0

In * Web.config *所有軟件包都已註冊並具有其名稱和版本對。 * Web.config *中的實際版本和版本不匹配。 – TIKSN

+0

感謝您的回答!如果您在討論Web.config文件時編輯原始答案,我將能夠刪除我的投票。 –

1

我們在談論System.Web.Mvc.dll必須有保存版本,如果是的話?如果我將這個DLL添加到我的域中,我只能使用4.0版本。不過,我的web API中有一個5.1版本的web配置文件項目。我真的不明白爲什麼我必須匹配這些版本,以及爲什麼我的解決方案無法識別最高版本,如果這是它失敗的原因。我相信Visual Studio 2013 Express會自動加載版本5.1,但是我必須爲域項目獲得我自己的版本,並且不提供5.1。關於MVC最糟糕的事情之一是依賴管理。

1

您正在向MVC全局過濾器添加HttpFilter(WebAPI過濾器)。你的過濾器應該被添加到HttpFilterCollection

一下添加到filterConfig.cs

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

而且這Global.ascx.cs:

FilterConfig.RegisterHttpFilters(GlobalConfiguration.Configuration.Filters); 
相關問題