0

好的。我在 web 表单中遇到了一些非常奇怪的 asp.net 身份。我设置了 web.config 文件以建立与本地 sqlexpress 服务器的连接。我之前创建了一个数据库并运行了使用 asp.net 身份和 4.5 .net 框架的 Web 应用程序。第一次运行 Web 应用程序时,表是在 sql server 数据库中自动为我创建的,但后来我注意到在解决方案下的 APP_DATA 文件夹中创建了另一个名为 aspnetdb.mdf 的数据库

尽管我已经指出连接字符串出于某种原因连接到 sql 服务器,但 Web 应用程序连接到位于 APP_DATA 中的新创建的 localdb 数据库。

我在这里做错了吗?

谢谢

4

1 回答 1

0

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

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

web.config有这个:

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

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

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

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

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

像这样的东西(在我的情况下_userManager是类型 UserManager<User>并在运行时注入到我的控制器构造函数中。

var user = _userManager.FindById(User.Identity.GetUserId());

if (_userManager.IsInRole(user.Id, "Admin"))
{
        //Do admin stuff
}
于 2014-05-31T17:00:58.353 回答