1

私はvs2010と.NET4を使用してASP.NETMVCを回避する方法を学んでいます。本番用ではなく、個人的な使用のためだけです。

デフォルトのASP.NETMVCを作成しました。これには、既存のホームページ、ページ、ログインページ、登録ページが付属しています。既存のログインページと登録ページを使用しようとすると、(SQLサーバーがない)SQLMembershipProviderを、MySQL.Web.SecurityのConnector/NETにあるMySQLMembershipProviderに置き換えました。

しかし、これはすぐには機能しませんでした。スキーマの自動生成で人々が抱えていると思われる一般的な問題(グーグルで解決)を除いて、私が気付いた他の2つの問題がありました。

1つ目は、未設定のままにするか、単に空の文字列として使用すると、PasswordStrengthRegularExpressionによってMySQLMembershipProviderでNull例外が発生することです。問題が発生していた「if」ステートメントを修正するようにプロバイダーコードを変更することで、これを解決しました。(思い出すと、文字列が空でないことを確認するだけで、文字列がnullであるかどうかは確認しませんでした)

2つ目は、MySQLMembershipProviderにInitializeメソッドがあり、基本クラスからオーバーライドされます。このメソッドは、プロバイダーのインスタンス化ごとに呼び出す必要があります。このメソッドは、最初のインスタンス化でのみ呼び出され、その後は呼び出されませんでした(コードをステップ実行し、ブレークポイントを使用することで決定されます)。プロバイダーは、ページの読み込みごとに1回インスタンス化されているようです。

私の解決策(最善ではありません)は、MySQLMembershipProviderを変更して、Initializeの呼び出しの引数を格納する静的変数と、オブジェクトが初期化されているかどうかを格納する変数を作成することでした。次に、他のすべてのメソッドの先頭にあるInitializeメソッドを呼び出します。Initializeメソッドは、オブジェクトがすでに初期化されている場合に即座に戻るように変更されました。

私の質問はこれです:MySQLMembershipProviderに欠陥があり、したがって私が説明している問題はバグですか、それとも何かを誤解してMySQLMembershipProviderを正しく使用していませんか?

注意:コードを見たい場合は、その90%が自動生成されているか、ソースとしてmysqldevサイトから入手できるビットを教えてください。かなりたくさんあります。

4

0 に答える 0