2013-02-13 324 views
0

我不斷收到錯誤Key cannot be null. Parameter name: key。它看起來像失去了authCookie,但Request.IsAuthenticated仍然設置爲true。這讓我瘋狂。如果用戶沒有登錄,我也可以處理這個錯誤。但是錯誤仍然出現。認證錯誤:密鑰不能爲空。參數名稱:密鑰

它失敗的地方就在這裏脫穎而出例如

@if (User.IsInRole("Admin")) 
     { 
     <button class="button-green white">Save</button> 
     } 

但如果看看有哪些用戶擁有的屬性還在說IsAuthenticated = true的名稱和作用也是正確的,車票仍然有效。

這是調用堆棧

System.ArgumentNullException was unhandled by user code 
HResult=-2147467261 
Message=Key cannot be null. 
Parameter name: key 
Source=System 
ParamName=key 
StackTrace: 
at System.Collections.Specialized.HybridDictionary.get_Item(Object key) 
at System.Web.Security.RolePrincipal.IsInRole(String role) 
at ASP._Page_Views_Admin_EditText_cshtml.Execute() in d:\SubVersion\Oline\Project1\Source\Oline.Portal\Views\Admin\EditText.cshtml:line 78 
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
at System.Web.WebPages.StartPage.RunPage() 
at System.Web.WebPages.StartPage.ExecutePageHierarchy() 
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) 
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) 
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) 
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) 
InnerException: 

這是我的自定義RoleProvier

public override string[] GetRolesForUser(string username) 
{ 
    var user = (string)HttpContext.Current.Session["UserRoles"]; 
    var ret = new[] { user }; 
    return ret; 
} 
+0

你在'EditText.cshtml'視圖中有78行嗎? – 2013-02-18 13:03:57

+0

你確定你有一個身份集?你有一個自定義的會員供應商? – 2013-02-18 13:05:47

+0

@Darin。第78行是我的問題中的第一個代碼示例。 BoaS:是的,我可以看到我的用戶身份。我沒有一個自定義的成員資格提供者。但我有一個CustomRoleprovider。這是最後一個例子。 – mortenstarck 2013-02-18 13:48:38

回答

0

上述問題的解決方案是,這部分var user = (string)HttpContext.Current.Session["UserRoles"];,即變爲零。特別是我回去和堡壘,在Visual Studio 2012中改變的東西。感謝您的建議:)