以前は正常に動作していた 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 フィルターが解放されるのはなぜですか?