2015-10-19 3 views
0

Проект был обновлен с MVC 4 до MVC 5 из-за нового использования Visual Studio 2015, который не компилировал представления бритвы должным образом (что-то, что документировано Microsoft, а не проблема). Мы используем вспомогательные классы для проектов, чтобы получить значения, хранящиеся в Identity Claims.Проблема с претензиями после перенастройки проекта на MVC5, неожиданный вызов GetRolesForUser

В этом классе, кто-то сделали вызов:

System.Security.Claims.ClaimsPrincipal.Current.Claims.ToList() 

, который работал в предыдущей версии MVC4, но после переноса всех пакетов NuGet необходимых для MVC5, этот конкретный вызов выдает следующее сообщение об ошибке:

An exception of type 'System.ArgumentNullException' occurred in System.Web.Providers.dll but was not handled in user code

Value cannot be null.

Parameter name : username

System.Web.Providers.DefaultRoleProvider.GetRolesForUser(String username) +183 System.Web.Security.RolePrincipal.GetRoles() +215
System.Web.Security.d__1.MoveNext() +58
System.Security.Claims.d__1.MoveNext() +253
System.Security.Claims.d__1.MoveNext() +209
System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) +445 System.Linq.Enumerable.ToList(IEnumerable`1 source) +58

Я сделал Еогеасп() на этой коллекции вместо этого, и это, как после все определенных пользовательских претензий он идущий к неожиданному концу, или он пытается извлечь вещи из GetRoleForUser, и я не знаю почему.

Если у кого есть подсказка, я могу предоставить более подробную информацию, если потребуется.

Setup из Web.Config этого проекта MVC:

<modules> 
     <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
     <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
     <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
     <remove name="FormsAuthentication" /> 
    </modules> 
.... 

<system.identityModel> 
    <identityConfiguration> 
     <audienceUris> 
     <add value="http://localhost:58663/" /> 
     </audienceUris> 
     <securityTokenHandlers> 
     <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     </securityTokenHandlers> 
     <certificateValidation certificateValidationMode="None" /> 
     <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> 
     <authority name="QuadraSTS"> 
      <keys> 
      <add thumbprint="XXXHIDDENXXX" /> 
      </keys> 
      <validIssuers> 
      <add name="QuadraSTS" /> 
      </validIssuers> 
     </authority> 
     </issuerNameRegistry> 
     <claimsAuthorizationManager type="ClaimsBasedAuthorization.AuthorizationManager,QuadraBox" /> 
    </identityConfiguration> 
    </system.identityModel> 
    <system.identityModel.services> 
    <federationConfiguration> 
     <cookieHandler requireSsl="false" persistentSessionLifetime="1.0:0:0" path="/" /> 
     <wsFederation passiveRedirectEnabled="true" persistentCookiesOnPassiveRedirects="true" issuer="http://something:97/QuadraSTSBeta/" realm="http://localhost:58663/" requireHttps="false" /> 
    </federationConfiguration> 
    </system.identityModel.services> 

ответ

0

Проблема была в основном вызвана WebMatrix данных, которые ненадлежащим образом пытается загрузить пользовательские роли.

Поскольку он не использовался в проекте и не было причин его присутствия в этом проекте, я решил удалить его.

Удаление утилиты WebMatrix nuget и удаление ВСЕХ ссылок WebMatrix внутри проекта разрешили проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^