0

これはほんの少し前に私に起こりました。私のコードではRoles、指定されたユーザーが割り当てられていることを取得する必要があります。

これが私のコードの内容です:

string[] roles = {};
SqlRoleProvider fxSRP = new SqlRoleProvider();

string id = Request.QueryString["UserName"] as string;

string userName = id;

これで問題ありませんが、このビットに到達すると:

roles = fxSRP.GetRolesForUser(userName);

Object reference not set to an instance of an objectシステムは、見捨てられた例外をスローします。正直なところ、数分間私を夢中にさせました。しかし、その小さなコードをこれに変更すると (これは明示的な呼び出しですよね?):

roles = Roles.GetRolesForUser(userName);

コードは機能します。ユーザーの を取得して、好きなようにRoles使用できます。

知りたいのですが、なぜGetRolesForUserinstatiatedを使用してもうまくSqlRoleProviderいかないのですか? これは、私が作業する次のコードでも発生する可能性があるためRemoveUsersFromRolesですAddUsersToRoles。また、プログラムはどのようなインスタンスを探していますか? メソッドが機能するためにインスタンス化していないものは何ですか?

4

2 に答える 2

1

を呼び出しnew SqlRoleProvider()ていますが、そのコンストラクターのドキュメントによると、http://msdn.microsoft.com/en-us/library/system.web.security.sqlroleprovider.sqlroleprovider.aspx :

SqlRoleProvider コンストラクターは ASP.NET によって呼び出され、アプリケーションの構成で指定された SqlRoleProvider クラスのインスタンスを作成します。このコンストラクターは、コードから使用するためのものではありません。

(私のものを強調してください。) 私はこのクラスの専門家ではありませんが、この発言は、それを試みるべきではないことを示していると思います。

于 2014-01-09T03:29:11.617 に答える