ASP.NET Сбой контроллера MVC 4 Не найден тип, соответствующий контроллеру с именем «учетная запись»

#c# #asp.net #asp.net-mvc-4

#c# #asp.net #asp.net-mvc-4

Вопрос:

Я пытаюсь заставить этот URL работать:

 http://localhost:41359/account/login
  

Вот мой контроллер MVC, который я создал:

 namespace CTHRC.Roti.Web.UI.Controllers
{
    public class AccountController : Controller
    {
        [HttpGet]
        public ActionResult Login()
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("ModelContext", "Users", "Id", "UserName", autoCreateTables: true);
            }
            return View();
        }
     }
}
  

и каждый раз, когда я перехожу к этому URL, я получаю это сообщение об ошибке:

 {"Message":"No HTTP resource was found that matches the request URI 'http://localhost:41359/account/login'.","MessageDetail":"No type was found that matches the controller named 'account'."}
  

Я попытался добавить к нему MapRoute и все равно получаю ту же ошибку:

 public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Account",
                url: "account/{action}/{id}",
                defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
            );
        }
    }
  

что я делаю не так?

Комментарии:

1. Вы пытаетесь добиться этого с помощью AJAX?

2. Кроме того, вы должны поместить свои более конкретные маршруты перед более общими. Поскольку у вас определены маршруты, Account маршрут никогда не будет достигнут, поскольку Default маршруты удовлетворяют условию.

3. Я все еще получаю ту же ошибку при переносе сопоставления учетных записей до значения по умолчанию …. любое другое предложение?

4. Нет, я просто пытаюсь получить этот URL-адрес в своем браузере

5. есть ли у вас контроллер в папке контроллеров по умолчанию? или вы пишете его в другом проекте?

Ответ №1:

Когда вы добавляете маршруты, он всегда будет пытаться найти что-то на основе порядка, в котором вы их добавляете. поэтому, если вы сначала поместите «подстановочный знак», он никогда не перейдет к следующему.

Попробуйте это:

 public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Account",
                url: "account/{action}/{id}",
                defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

        }
    }