我有ASP.NET MVC4应用程序项目。我还通过创建ApiController
将WebApi添加到我的项目中。情况是在Controller
个后代中,两个语句都返回true
,但在ApiController
个后代中,第一个语句是false
,但第二个语句返回true
:
bool booool1 = User.IsInRole("Radiolog");
bool booool2 = Roles.IsUserInRole(User.Identity.Name, "Radiolog");
这是我的web.config配置:
<add key="enableSimpleMembership" value="false" />
<add key="autoFormsAuthentication" value="false" />
...
<roleManager cacheRolesInCookie="true" defaultProvider="CustomRoleProvider" enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider" type="RisSystem.Services.CustomRoleProvider" />
</providers>
</roleManager>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
我还注意到在ApiController中[Authorize]
运行良好但[Authorize(Roles="")]
永远不会调用方法。
在ApiController
方法中,我使用标准client.DefaultRequestHeaders.Authorization = new BasicAuthenticationHeaderValue(login, password);
中的FormsAuthentication
和Controller
进行身份验证。
WebApi身份验证在WebApiConfig.cs
函数中的Register(HttpConfiguration config)
中设置:
var authConfig = new AuthenticationConfiguration();
authConfig.AddBasicAuthentication((userName, password) => AuthenticationService.ValidateUser(userName, password));
config.MessageHandlers.Add(new AuthenticationHandler(authConfig));