3

以前は正常に動作していた MVC 4 アプリケーションに問題がありましたが、何らかの理由で停止しました。その理由がわかりません。シンプルな memebrship プロバイダーとコード ファーストのアプローチを使用します。これは、ホーム コントローラーのインデックス アクション メソッドです。

[Authorize]
public class HomeController : Controller
{
    private IActivityRepository repo;

    public HomeController(IActivityRepository activityRepository)
    {
        repo = activityRepository;
    }

    //Allow anonymous to allow to create database if there isn't one yet
    [AllowAnonymous]
    public ActionResult Index()
    {
        repo.InitializeDatabase();       //!!!!!!!!!!!!!!!!!!!!!

        return RedirectToAction("ManageActivities");
    }

私の全体的な概念は、データベースが存在しない場合、InitializeDatabase メソッドで作成されるということです。次に、ユーザーは [Authorize] 属性で装飾された ManageActivities アクション メソッドにリダイレクトされます。これにより、ユーザーは AccountCotroller (MVC4 の箱から出して) のログイン アクション メソッドに実質的にアクセスできます。このコントローラーは、InitializeSimpleMembershipAttribute フィルターを起動する [InitializeSimpleMembership] で装飾されています。

このロジックは、少し前に私にとってはうまくいきました。今日、テスト目的で新しいデータベースを作成したいと思いました。データ コンテキストを作成するときは、次のようにデータベースのカスタム名で基本クラスを呼び出します。

public class ActivityLogContext : DbContext
{
    public ActivityLogContext() : base("ActivitiesConnection")
    {

    }

そのため、接続文字列の詳細を変更して、アプリケーションを実行しました。残念ながら、何らかの理由で、ホーム コントローラーから Index メソッドを実行する前に、コードが InitializeSimpleMemebership フィルターにヒットします ([AllowAnonymous] で装飾されていても)。実際には、単純なメンバーシップが初期化されていますが、データベースがまだ存在していないため、エラーが発生します。

私の質問は、 Index メソッドが承認を必要としない場合、アプリケーションの起動時に InitializeSimpleMemebership フィルターが解放されるのはなぜですか?

4

1 に答える 1