Я думал, что у меня есть хотя бы основания для понимания маршрутизации в MVC после всей прочитанной мной документации, но только для того, чтобы потерпеть неудачу при попытке ее использовать.
У меня есть следующие два маршрута, объявленные в моемGlobal.aspx
routes.MapRoute(
"", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Admin", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
У меня есть AdminController, у меня есть несколько методов, один из которых - метод «Список», который выводит список продуктов в представление «Список».
Iмне показалось, что я понял, как работает RedirectToAction, и я добавил метод «Add» (см. ниже), который добавляет новый продукт и возвращает RedirectToAction, который, как я понял, будет правильным способом перенаправления на действие List в том же «AdminController»
[HttpPost]
public ActionResult Add(Product product) {
if (_prodRepo.Add(product)) {
return RedirectToAction("List", "Admin");
}
return View("Add", product);
}
Однако при возврате «Добавить» он всегда пытается перенаправить на путь website.com/Account/Login/ReturnUrl=%2f
.
Однако, если я захожу на website.com/Admin, он отображает список, как я и ожидал.Но при использовании RedirectToAction, как в примере выше, он пытается перейти к /Account/Login
(Controller / action).
Насколько я понял, RedirectToAction ("List", "Admin") будет маршрутизироватьк методу «List» на контроллере AdminController и к тому, что я использовал его, как и ожидалось.
Может кто-нибудь, пожалуйста, помогите мне понять причину этого.Но также, кто-то может опубликовать некоторые рекомендуемые статьи для понимания всей маршрутизации MVC, включая то, как web.config работает с маршрутизацией.
Наконец, я также понял, что обнаружение маршрута с помощью инфраструктуры выполняется в том порядке, в котором ониуказаны в вашем маршруте .MapRoute () объявление и останавливается на первом, который соответствует.Поэтому, если первый из них указан как Controller = "Admin", Action = "List", я бы по соглашению ожидал, что это правильный маршрут, по которому он будет сначала совпадать и возвращаться.