2

ASP.NET MVC 4 アプリでログイン フォームを設定しようとしています。現在、ここに示すようにビューを構成しています。

RouteConfig.cs

routes.MapRoute(
  "DesktopLogin",
  "{controller}/account/login",
  new { controller = "My", action = "Login" }
);

MyController.cs

public ActionResult Login()
{
  return View("~/Views/Account/Login.cshtml");
}

[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
  return View("~/Views/Account/Login.cshtml");
}

ブラウザーで /account/login にアクセスしようとすると、次のようなエラーが表示されます。

The current request for action 'Login' on controller type 'MyController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult Login() on type MyApp.Web.Controllers.MyController
System.Web.Mvc.ActionResult Login(MyApp.Web.Models.LoginModel) on type MyApp.Web.Controllers.MyController

ASP.NET MVC 4 で基本的なフォームをセットアップするにはどうすればよいですか? ASP.NET MVC 4 のサンプル インターネット アプリ テンプレートを見てきました。手伝ってくれてどうもありがとう。

4

1 に答える 1

7

これはまだ試していませんが、ログイン アクションに適切な Http Verb で注釈を付けてみてください。GETログイン ページの表示とログインPOSTの処理に を使用していると仮定しています。

[HttpGet]最初のアクションと2 番目のアクションを追加することにより[HttpPost]、ASP.Net のルーティングは、どのメソッドが使用されたかに基づいて、どの Action メソッドを呼び出すかを知ることができます。コードは次のようになります。

[HttpGet] // for viewing the login page
[ViewSettings(Minify = true)]
public ActionResult Login()
{
  return View("~/Views/Account/Login.cshtml");
}

[HttpPost] // For processing the login
[ViewSettings(Minify = true)]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
  return View("~/Views/Account/Login.cshtml");
}

これが機能しない場合は、以下のように 2 つのルートと 2 つの異なる名前のアクションを使用することを検討してください。

routes.MapRoute(
   "DesktopLogin",
   "{controller}/account/login",
   new { controller = "My", action = "Login" }
); 

routes.MapRoute(
   "DesktopLogin",
   "{controller}/account/login/do",
   new { controller = "My", action = "ProcessLogin" }
);

既に StackOverflow に関する他の同様の質問と回答があります。参照してください: How to route GET and DELETE for the same urlと、ASP.Net のドキュメントも役立つ可能性があります。

于 2013-01-24T19:11:28.177 に答える