У меня есть веб-сайт ASP.NET MVC4 (с использованием vs2012), который позволяет пользователям войти в систему, нажав ссылку «Войти». Я получаю позорную ошибку:MVC Неоднозначное действие для входа
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
Я проверил кучу ссылок здесь, в том числе:
Resolving ambiguity Ambiguous action method call, for some reason 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; }
}
А вот информация о маршрутизации ... Я пытался раскомментировать один маршрут (и изменил его имя), но я все еще получаю ту же ошибку:
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?
Возможно, у вас есть два одинаковых маршрута (# 1 и # 3, так как ID является необязательным). Удалите/закомментируйте первый маршрут и оставите только по умолчанию. – Tommy
Я пробовал комментировать каждую из них (по одному), и оба раза она по-прежнему давала мне ту же ошибку. – Robert
Какой url использует 'Url.Action (« Login »,« Account »)' генерирует? –