11

[Authorize]一部の MVC4 コントローラーに承認属性を追加しようとしていますが、プランまたはである限り正常[Authorize(Users="myuser")]に機能しますが、2 番目に任意の種類のロール フィルタリングを追加すると、バラバラになります。[Authorize(Roles="admin")]. 次に、次のようなエラーが発生し始めます。

「/」アプリケーションでサーバー エラーが発生しました。

SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索中にエラーが発生しました)

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

SQLExpress データベース ファイルの自動作成エラー:

接続文字列は、アプリケーションの App_Data ディレクトリ内のデータベースの場所を使用して、ローカルの Sql Server Express インスタンスを指定します。プロバイダーは、データベースが存在しないと判断したため、アプリケーション サービス データベースを自動的に作成しようとしました。アプリケーション サービス データベースの存在を正常に確認し、アプリケーション サービス データベースを自動的に作成するには、次の構成要件が必要です。

アプリケーションが Windows 7 または Windows Server 2008R2 で実行されている場合、プロバイダー データベースの自動作成を有効にするには、特別な構成手順が必要です。追加情報は、http: //go.microsoft.com/fwlink/?LinkId=160102で入手できます。. アプリケーションの App_Data ディレクトリがまだ存在しない場合、Web サーバー アカウントには、アプリケーションのディレクトリへの読み取りおよび書き込みアクセス権が必要です。App_Data ディレクトリがまだ存在しない場合、Web サーバー アカウントは自動的に作成するため、これが必要です。アプリケーションの App_Data ディレクトリが既に存在する場合、Web サーバー アカウントには、アプリケーションの App_Data ディレクトリへの読み取りおよび書き込みアクセスのみが必要です。これが必要になるのは、アプリケーションの App_Data ディレクトリ内に Sql Server Express データベースが既に存在することを Web サーバー アカウントが検証しようとするためです。Web サーバー アカウントから App_Data ディレクトリへの読み取りアクセスを取り消すと、プロバイダーは Sql Server Express データベースが既に存在するかどうかを正しく判断できなくなります。これにより、プロバイダーが既存のデータベースの複製を作成しようとすると、エラーが発生します。新しいデータベースの作成時に Web サーバー アカウントの資格情報が使用されるため、書き込みアクセスが必要です。Sql Server Express がマシンにインストールされている必要があります。Web サーバー アカウントのプロセス ID には、ローカル ユーザー プロファイルが必要です。マシン アカウントとドメイン アカウントの両方のローカル ユーザー プロファイルを作成する方法の詳細については、readme ドキュメントを参照してください。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[SqlException (0x80131904): SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索エラー)]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 例外、ブール値の breakConnection、アクション1 の再試行、DbConnectionOptions userOptions、DbConnectionInternal& 接続) +5311874 System.Data .ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 wrapCloseInAction) +5295167 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5307115
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +145
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +920
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +307
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) +434
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +5309659
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) +38
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource

1 retry, DbConnectionOptions userOptions) +143
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 回の再試行) +83 System.Data.SqlClient.SqlConnection.Open() +96
System.Web.Management.SqlServices.GetSqlConnection(文字列サーバー、文字列ユーザー、文字列パスワード、ブール値の信頼済み、文字列接続文字列) +76

[HttpException (0x80004005): SQL Server データベースに接続できません。]
System.Web.Management.SqlServices.GetSqlConnection(String server、String user、String password、Boolean trusted、String connectionString) +131
System.Web.Management.SqlServices. SetupApplicationServices(文字列サーバー、文字列ユーザー、文字列パスワード、Boolean trusted、文字列接続文字列、文字列データベース、文字列 dbFileName、SqlFeatures 機能、ブール値インストール) +89
System.Web.Management.SqlServices.Install(文字列データベース、文字列 dbFileName、文字列接続文字列) +27
System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString) +386

バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.17929

ここで何が起こっているのか本当にわかりません。繰り返しますが、authorize 属性のロール ビットを削除すると、正常に動作します (少なくとも権限のないユーザーを停止する限り) が、管理者ユーザーをアプリにハード コードする必要がある場合は良くありません!

ここで何が起こっているのか、どうすれば適切に機能させることができるのでしょうか?

ありがとう、

4

5 に答える 5

15
于 2012-09-09T20:07:55.300 に答える
6

最初の行を移動する必要はありません。フィルターを追加するだけでテストしました

filters.Add(new InitializeSimpleMembershipAttribute());

ただし、ログインが必要なサイトを作成している場合は、その 1 つのコントローラーに配置するだけでよく、すべてのコントローラーに配置する必要はありません。

于 2012-09-13T00:48:51.490 に答える
2

MVC 4のインターネットテンプレートによって生成されたInitializeSimpleMembershipAttrributeは、開発者がフォーム認証を使用していない場合にSimpleMembershipデータベースを遅延ロードするために設計されました。フォーム認証を使用している場合は、このフィルターを削除して直接初期化することをお勧めします。この記事では、これを行う方法について説明します。

于 2013-03-06T14:31:25.527 に答える
1

InitializeSimpleMembershipAttribute使用法、SimpleProviders の web.config 設定を確認し、使用InitializeSimpleMembershipAttribute時に特別に承認フィルターを作成することを検討することもできます。Authorize(Roles="any")

于 2013-10-15T20:37:33.107 に答える