ASP.NET Проблемы с маршрутизацией MVC 4

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

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

Вопрос:

Я пытаюсь перейти к этому URL-адресу в своем браузере:

 http://localhost:41359/account/login
  

Вот мои маршруты из моего RouteConfig.cs:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace CTHRC.Roti.Web.UI
{
    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 }
            );
        }
    }
}
  

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

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

Здесь все кажется правильным, но я все еще получаю эту ошибку. Вот мой AccountController:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebMatrix.WebData;
using CTHRC.Roti.Domain.Api.Services;

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();
        }

        [HttpPost]
        public ActionResult Login(FormCollection form)
        {
            bool success = WebSecurity.Login(form["username"], form["password"], false);
            if (success)
            {
                string returnUrl = Request.QueryString["ReturnUrl"];
                if (returnUrl == null)
                {
                    Response.Redirect("/home/index?userID="   WebSecurity.CurrentUserId);
                }
                else
                {
                    Response.Redirect(returnUrl);
                }
            }
            return View();
        }
        [HttpGet]
        public ActionResult Register()
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("UserDb", "Users", "Id", "UserName", autoCreateTables: true);
            }
            return View();
        }

        [HttpPost]
        public ActionResult Register(FormCollection form)
        {
            WebSecurity.CreateUserAndAccount(form["username"], form["password"], new { Email = form["email"], Language = form["language"] });
            Response.Redirect("/account/login");
            return View();
        }

        public ActionResult Logout()
        {
            WebSecurity.Logout();
            Response.Redirect("/account/login");
            return View();
        }

    }
}
  

Я уже несколько дней борюсь с этой проблемой, я очистил свое решение, перестроил свое решение и создал свое решение, и я все еще получаю эту ошибку. Если кто-нибудь может мне помочь, я был бы очень признателен. Заранее спасибо.

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

1. Что произойдет, если вы поместите свой Default маршрут после своего Account маршрута?

2. Мой маршрут по умолчанию после маршрута моей учетной записи, не имеет значения, в каком порядке, я получаю ту же ошибку, когда я goto: http://localhost:41359/account/login

3. Согласно сообщению об ошибке, кажется, что вы не передаете имя действия в URL.

4. Еще одна вещь, если у вас есть два проекта или области в вашем приложении, вам также необходимо включить имя сборки в маршрут, чтобы MVC мог найти правильный контроллер. И убедитесь, что ваш контроллер находится в правильном каталоге .. он не должен быть в контроллере Web API для сопоставления этого URL