2016-10-12 4 views
1

Я в настоящее время пытаюсь сгенерировать этот URL «/ Cloud/Hosting/RoaringPenguin/Manage/Exclusions».Asp.Net MVC 5 маршрутизация пользовательских действий под областью

Вот Зона регистрации

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Hosting_default", 
      "Cloud/Hosting/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

здесь контроллер

public class RoaringPenguinController : PortalControllerBase 
{ 


    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 


} 

я попробовал добавил маршрут на само действие, как так

[Route("Manage/Exclusions")] 
public ActionResult Exclusions() 

Я также пробовал добавление некоторых атрибутов к самому контроллеру

[RouteArea("Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : PortalControllerBase 

, но это, похоже, не работает. Если я оставлю все атрибуты, то окончательный URL-адрес, который я получаю, это «/ Cloud/Hosting/RoaringPenguin/Exclusions». Кто-нибудь знает, как я могу получить «Управление» в URL-адресе?

Просто, чтобы подтвердить у меня есть следующий набор в моем методе RegisterRoutes под классом RouteConfig

routes.MapMvcAttributeRoutes(); 

Любая помощь приветствуется. Спасибо

ответ

1

Ваш маршрут по умолчанию не разрешает часть «Управление/Исключения» в конце. Если вы указали URL только /Cloud/Hosting/RoaringPenguin/Exclusions (минус Manage часть пути), все будет хорошо.

Если вам нужен маршрут, чтобы быть именно этим, то маршрутизация атрибутов - ваш лучший выбор. Тем не менее, ваши упомянутые попытки в этом все что-то отсутствуют. Ваш контроллер должен быть украшен как RouteArea и RoutePrefix составлять первую часть пути:

[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : Controller 

Однако, это типично для фактического выполнения базового контроллера при работе с областями, так что вы можете указать RouteArea всего один Место:

[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")] 
public class HostingBaseController : Controller 

[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : HostingBaseController 

Затем на ваши действия:

[Route("Manage/Exclusions")] 
public ActionResult Exclusions() 

Как было.

+0

Hi Chris, Я попробовал первое предложение (без базового контроллера), но все, что я получаю, это ошибка 404 'Ошибка сервера в '/'. Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, если его имя было изменено или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно. Запрошенный URL:/Cloud/Хостинг/RoaringPenguin/Управление/Исключения Информация о версии: Microsoft .NET Framework Версия: 4.0.30319; ASP.NET Версия: 4.6.1069.1' – tjackadams

+1

Есть что-то еще. Либо область не регистрируется должным образом, маршрутизация атрибутов не включена должным образом, или другой маршрут связан с этим. Основываясь на том, что вы опубликовали, это должно сработать. Если что-то не так, как ваша область на самом деле не просто 'Хостинг', но что-то вроде« CloudHosting », то вы должны внести необходимые исправления в код. –

+0

Вы были верны. В основном моя маршрутизация атрибутов вызывалась после регистрации моей области. Это решение '// атрибут маршрутизации routes.MapMvcAttributeRoutes(); // Регистрация области РайонРегистрация.RegisterAllAreas(); ' после того, как я сделал это, изменили ваше начальное решение. Большое спасибо! – tjackadams

0

Попробуйте с этим кодом

[RouteArea("AreaName", AreaPrefix = "Cloud/Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class SampleController : Controller 
{ 
    [Route("Manage/Exclusions")] 
    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 
} 

или

[RoutePrefix("Cloud/Hosting/RoaringPenguin")] 
public class RoaringPenguinController : PortalControllerBase 
{ 

    [Route("Manage/Exclusions")] 
    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 

} 

Это будет первая линия

routes.MapMvcAttributeRoutes(); 

После этого только вы должны написать эту строку

AreaRegistration.RegistrationAllAreas(); 
Смежные вопросы