Asp.net mvc 5 在应用程序中按角色限制内容。GetRolesforUser

Asp.net mvc 5 在应用程序中按角色限制内容。GetRolesforUser,asp.net-mvc-5,asp.net-mvc-5.2,Asp.net Mvc 5,Asp.net Mvc 5.2,我有一个MVC5.2应用程序,它利用了ASP.Identity和增强的角色服务。为所有用户分配了一个前缀如下的角色:内部用户的Corporate(如CorporateAdmin)和外部用户的Client(如ClientAdmin) 我有我只想在视图中显示的内容,这些内容只向经过身份验证的外部客户端显示。我尝试了以下多种格式: @if (Request.IsAuthenticated && !Roles.GetRolesForUser().Contains("Corporate")

我有一个MVC5.2应用程序,它利用了ASP.Identity和增强的角色服务。为所有用户分配了一个前缀如下的角色:内部用户的Corporate(如CorporateAdmin)和外部用户的Client(如ClientAdmin)

我有我只想在视图中显示的内容,这些内容只向经过身份验证的外部客户端显示。我尝试了以下多种格式:

@if (Request.IsAuthenticated && !Roles.GetRolesForUser().Contains("Corporate"))
    {
         *Content to be displayed*
    }
返回的错误消息是CS0201:只能将赋值、调用、递增、递减、等待和新对象表达式用作语句

我也尝试过:

@if (Request.IsAuthenticated && Roles.GetRolesForUser().Contains("Corporate") == false)
    {
        *Content to be displayed*
    }

所有人都收到相同的错误


任何方向都非常感谢。

我认为,这一错误意味着GetRolesForUser返回字符串数组,而不是字符串列表。数组未包含方法

尝试:


逻辑有缺陷;GetRoles返回角色列表。您应该检查每个角色,而不是检查公司是否是角色之一。但是,如果列表中有“公司”一词,那么该列表是否会导致bool变为false呢?是的。这就是为什么我没有将此作为答案发布。我怀疑括号之间的代码。你能在没有if的情况下发布或只是测试吗?公司不是一个角色。它是角色的前缀。那么,我必须检查所有前缀为Corporate的角色吗?这似乎是不必要的负担。请尝试使用LINQ:Roles.GetRolesForUser.Existsrole=>role.StartsWithCorporate。在Razor视图中需要@using System.Linq。开始时检查前缀。您可以调用检查前缀、后缀和中缀的Contains。
@if (Request.IsAuthenticated && User.IsInRole("CorporateAdmin") == false)
    {
        *Content to be displayed*
    }
@if (Context.User.IsInRole("Corporate"))
{
   "Content to be displayed"
}