0

わかった。Web フォームの asp.net ID で非常に奇妙なことが発生しています。web.config ファイルをセットアップして、ローカルの sqlexpress サーバーへの接続を確立します。以前にデータベースを作成し、asp.net ID と 4.5 .net フレームワークを使用する Web アプリケーションを実行しました。Web アプリを初めて実行したとき、SQL Server データベースにテーブルが自動的に作成されましたが、ソリューションの下の APP_DATA フォルダーに aspnetdb.mdf という名前で作成された別のデータベースがあることに気付きました。

接続文字列が何らかの理由で SQL サーバーに接続することを指摘しましたが、Web アプリは APP_DATA にある新しく作成された localdb データベースに接続します。

ここで何か間違ったことをしていますか?

ありがとう

4

1 に答える 1

0

奇妙なことに、コードベースでまさにこの問題に遭遇しました。私の開発者の 1 人は、「古い」ロール プロバイダを使用して、ユーザーが特定のロールに属しているかどうかを確認していました。これにより、アプリは、まだ存在するすべての構成として 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 に答える