ユーザーが「ログイン」リンクをクリックしてログインできるASP.NET MVC4 Webサイト(vs2012を使用)があります。悪名高いエラーが表示されます:
The current request for action 'Login' on controller type 'AccountController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult Login() on type MyProject.Controllers.AccountController
System.Web.Mvc.ActionResult Login(MyProject.Clients) on type MyProject.Controllers.AccountController
ここで、次のような多くのリンクを確認しました。
あいまいさの解決あいまい なアクション メソッド呼び出し、何らかの理由で ASP.NET MVC 3
SOの外にさらにいくつか。メソッドが正しく装飾されていることを確認しましたが、これが発生している理由をまだ見つけることができません。
「ログイン」リンクのコードは次のとおりです。
<ul class="topnav navRight">
@if (!User.Identity.IsAuthenticated)
{
<li><a href="@Url.Action("Login", "Account")" id="ViewLogin">LOGIN</a></li>
}
else
{
<li><a href="@Url.Action("Index", "ClientStats")">STATS</a></li>
<li><a href="@Url.Action("LogOut", "Account")">LOGOUT</a></li>
}
</ul>
と私のコントローラー:
[Authorize]
public class AccountController : CustomController
{
//
// GET: /Account/Logout
public ActionResult LogOut()
{
WebSecurity.Logout();
return RedirectToAction("Index", "Home");
}
[AllowAnonymous]
public virtual ActionResult Login()
{
return View();
}
[HttpPost]
[AllowAnonymous]
public virtual ActionResult Login(Clients model)
{
if (ModelState.IsValid)
{
Security security = new Security();
if (WebSecurity.Login(model.Username, model.Password))
{
using (MyProjectContext db = new MyProjectContext())
{
int userID = WebSecurity.GetUserId(model.Username);
Data.User user = db.Users.Find(userID);
if (user != null)
if (user.Active)
{
if (User.IsInRole("Administrator"))
return RedirectToAction("Admin", "ClientStats");
else
return RedirectToAction("Index", "ClientStats");
}
}
}
}
ModelState.AddModelError("", "Invalid Username or Password.");
return View(model);
}
}
CustomerController
特別なことは何もありませんが、とにかくここにあります:
public class CustomController : Controller
{
public enum PageNames
{
Home,
Services,
Testimonials,
Video,
Photo,
FAQ,
About,
Contact,
Events,
Profile
}
public int UserId
{
get { return Convert.ToInt32(Session["UserId"]); }
set { Session["UserId"] = value; }
}
public static string GetPageTitle(PageNames pageName)
{
string pageTitle = "Welcome to My Website!";
switch (pageName)
{
case PageNames.Services:
pageTitle = "- Services";
break;
case PageNames.Testimonials:
pageTitle = "- Testimonials";
break;
case PageNames.Video:
pageTitle = "- Videos";
break;
case PageNames.Photo:
pageTitle = "- Photos";
break;
case PageNames.FAQ:
pageTitle = "- Frequently Asked Questions";
break;
case PageNames.Contact:
pageTitle = "- Contact Us";
break;
case PageNames.Events:
pageTitle = "- Calnedar of Events";
break;
case PageNames.Profile:
pageTitle = "- Profile";
break;
}
return pageTitle;
}
public static Data.User ClientInfo { get; set; }
}
そして、これがルーティング情報です...1つのルートのコメントを外そうとしました(そして名前を変更しました)が、それでも同じエラーが発生します:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
//);
routes.MapRoute(
name: "id",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
ヘルプ/ガイダンスは大歓迎です!
UPDATE ルーティング値をコメントアウトして[HttpGet]
Loginメソッドに追加するという提案を試みましたが、それでも同じエラーがスローされます。私はこれが一度に機能したことを覚えているので、突然これを行うために最近何が変更されたのかわかりません。それは Web.Config の何かでしょうか?