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