【问题标题】:MVC5 simple membership/default membershipMVC5 简单成员/默认成员
【发布时间】:2014-06-01 10:56:39
【问题描述】:

我在 mvc5 上使用这个新的 asp 成员资格时遇到了一些麻烦

我正在尝试确定用户的角色,然后在满足角色条件的情况下显示一个按钮。 我将按钮的代码连接如下:

<p>
@if(User.IsInRole("canEdit"))
{
@Html.ActionLink("Create New", "Create")
}
</p>

简单明了,如果用户处于“canEdit”角色,则显示创建按钮,对吗?...错误...

当我把它放入我的剃须刀(chstml 或其他任何东西)时。文件并加载页面我得到以下 sql 相关错误:

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)

注意事项:

我有一个具有以下代码的 dbcontext:

  public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this,     DefaultAuthenticationTypes.ApplicationCookie);

        return userIdentity;
    }
}

public class GameContext : IdentityDbContext<ApplicationUser>
{
    public GameContext() : base("DefaultConnection", throwIfV1Schema: false)
    {

    }

    public static GameContext Create()
    {
        return new GameContext();
    }

为简洁起见,这些道具已被删除。

-我在配置文件中有一个连接字符串。 -我可以注册,登录注销,删除,使用isAuthenticated方法等。

我真的很困惑,任何关于这个的指针都会很棒

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework razor


    【解决方案1】:

    奇怪的是,我刚刚在我们的代码库中遇到了这个问题。我的一位开发人员正在使用“旧”角色提供程序来检查用户是否处于特定角色。这导致应用程序在 App_Data 中创建一个 LocalSql 数据库作为 machine.config 中仍然存在的所有内容的配置。连接字符串和提供者详细信息在machine.config 中指定,因此您的web.config 只会添加或删除它们。例如,如果您的 machine.config 说:

    <connectionStrings>
        <add name="LocalSqlServer" connectionString="..."/>
    </connectionStrings>
    

    你的web.config 有这个:

    <connectionStrings>
        <add name="MyConnectionString" connectionString="..."/>
    </connectionStrings>
    

    您的应用程序将能够查看和使用 both 字符串。要修复它,您可以先清除连接字符串,如下所示:

    <connectionStrings>
        <clear />
        <add name="MyConnectionString" connectionString="..."/>
    </connectionStrings>
    

    但这仍然留下了代码中使用旧角色(或配置文件)提供者的潜在问题。所以你在使用它时会遇到很多错误。你需要像这样切换代码:

    if (User.IsInRole("Admin"))
    {
        //Do admin stuff
    }
    

    类似这样的事情(在我的例子中,_userManager 的类型为 UserManager&lt;User&gt;,并在运行时注入到我的控制器构造函数中。

    var user = _userManager.FindById(User.Identity.GetUserId());
    
    if (_userManager.IsInRole(user.Id, "Admin"))
    {
            //Do admin stuff
    }
    

    【讨论】:

    • 谢谢,这似乎是票
    猜你喜欢
    • 2014-03-01
    • 2013-04-15
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2016-09-19
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多