Я новичок в MVC. Я мог бы интегрировать MVC 5.2 в мои существующие веб-формы Visual Studio 2012 Update 4. Я создал свой первый контроллер и все работало, как ожидалось. Даже когда я получал доступ к просмотру MVC, мне удалось использовать аутентификацию форм Windows из моего существующего проекта. Но когда был создан мой второй контроллер, он начал испортиться.ASP.Net MVC @ Url.Action() маршрутизация в неправильный контроллер
Это мой маршрут отображения:
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.EnableFriendlyUrls();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
У меня есть два контроллера оба расположены в ~/Controllers. Мой первый контроллер:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
//return View();
return Redirect("~/Default.aspx");
}
public ActionResult CloseSession()
{
return Redirect("http://www.yahoo.com");
}
}
Второй контроллер:
public class CajaWebController : Controller
{
//
// GET: /CajaWeb/
public ActionResult Index()
{
return View();
}
public ActionResult CloseSession()
{
return Redirect("http://www.cnn.com");
}
}
Я не знаю, что отношение к этой проблеме, но я включу, как будет достигнута точка зрения MVC. Мой начальный URL-адрес VS2012:
http://localhost/Fortia/CajaWeb.
Fortia - это мое имя приложения. Поскольку я объявил проверку подлинности Web Forms и
<location path="CajaWeb">
<system.web>
<authorization>
<allow roles="Fortia" />
<deny users="*" />
</authorization>
</system.web>
</location>
при запуске отладки старый механизм WebForms аутентификации приложение называется, старые WebForms страницы входа вызывается, и после успешного входа в систему, наконец, мой CajaWebController, Index() действие называется. Перед созданием CajaWebController он был HomeController, который был назван, но я предполагаю, что MVC Теперь выводит правильный контроллер является CajaWeb из целевого URL будучи
http://localhost/Fortia/CajaWeb.
Вызванный вид содержит следующий код:
<a href='@Url.Action("CloseSession", "CajaWeb")'>Close session</a>
Проблема заключается в том, что при нажатии на сгенерированную ссылку MVC вызывает действие HomeController.Index(), несмотря на то, что я явно установил CajaWebController.CloseSession() в @ Url.Action ...
Я просмотрел сгенерированную ссылку и выглядит неправильно:
<a href='/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb'>
это закодированный параметр разделитель & в & Но в любом случае я попытался handcoding в HREF, как
http://localhost/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb
, но результат был тот же.
Что не так?
[Не используйте web.config для блокировки путей авторизации в MVC, скорее всего, это не сработает и, безусловно, разрешит дыры в безопасности] (http://stackoverflow.com/questions/11765030/how-to -lock -down-paths-in-asp-net-mvc) –
В отличие от сайтов форума мы не используем «Спасибо», «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts). –
Возможно, пакет [URL-адреса дружественных URL-адресов ASP.NET] (http://aspnetfriendlyurls.codeplex.com/), который, как вам кажется, используется для WebForms, не очень хорошо работает с MVC? – CodeCaster