2014-08-27 2 views
6

Я новичок в 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&amp;controller=CajaWeb'> 

это закодированный параметр разделитель & в & Но в любом случае я попытался handcoding в HREF, как

http://localhost/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb 

, но результат был тот же.

Что не так?

+1

[Не используйте web.config для блокировки путей авторизации в MVC, скорее всего, это не сработает и, безусловно, разрешит дыры в безопасности] (http://stackoverflow.com/questions/11765030/how-to -lock -down-paths-in-asp-net-mvc) –

+0

В отличие от сайтов форума мы не используем «Спасибо», «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts). –

+0

Возможно, пакет [URL-адреса дружественных URL-адресов ASP.NET] (http://aspnetfriendlyurls.codeplex.com/), который, как вам кажется, используется для WebForms, не очень хорошо работает с MVC? – CodeCaster

ответ

0

Казалось бы, ASP.NET Friendly Urls package, который вы используете, мешает URL-адресам MVC.The library seems to be meant for WebForms anyway

Если он работает без него, то оставьте его таким, как URL-адреса MVC уже достаточно оптимизированы для SEO, когда имена контроллеров и действий имеют смысл для их содержимого.

+0

Я не могу удалить пакет Friendly Urls, потому что приложение, которое я обновляю, является WebForms и сильно зависит от этого пакета. Я просто пытаюсь добавить к нему поддержку MVC. Поэтому я посмотрю, как с этим жить. Но это будет другой вопрос (ы) – sammybar

0

Я думаю, что проблема заключается в том, что маршрут

http://localhost/Fortia/CajaWeb

не найдено ни одного маршрута, так что в конце концов будет маршрут по умолчанию, указанный в RouteConfig. Вам необходимо настроить маршрут или создать область в вашем приложении под названием «Fortia».

Смежные вопросы