2016-01-07 3 views
1

Новое в ASP MVC 6 (и ASP вообще) и искал некоторые рекомендации.ASP.NET MVC - многоуровневая URL-маршрутизация

В настоящее время у меня есть настройки маршрута по умолчанию в этой моде:

public void Configure(IApplicationBuilder app) 
    { 
     app.UseMvc(routes => routes.MapRoute(
      "Default", "{controller=Home}/{action=Index}/{id?}")); 
     app.UseFileServer(); 
    } 

В моем приложении, я ищу, чтобы иметь несколько маршрутов:

/projects/{id?} - Возвращает индекс, если идентификатор пуст/invalid или использует контроллер Проекты (id)

/projects/{id?}/phase/{id?} - Возвращает проект (id), если идентификатор фазы пуст/недействителен или использует контроллер Phase (id).

Любые идеи о том, как я мог бы наилучшим образом настроить это?

Спасибо, Джо

ответ

1

Я не эксперт по маршрутам, но это должно работать:

app.UseMVC(routes => { 
    routes.MapRoute(
     name: "project", 
     url: "project/{id}", 
     defaults: new { id = UrlParameter.Optional, controller="Project", action="Index"}); 
    routes.MapRoute(
     name: "projectphase", 
     url: "project/{id}/phase/{pid}", 
     defaults: new { id = UrlParameter.Optional, pid=UrlParameter.Optional, controller="Phase", action="Index" }); 
    }); 

Для недействительного/пустого ВЗОМТА, просто использовать RedirectToAction() отправить пользователь обратно в другой маршрут.

0

Один из способов решить, что для создания маршрута, чтобы принять как идентификатор проекта и локаторы ID, затем сделать условие в пределах каких-либо контроллеров

В вашем routeConfig.cs, создать новый маршрут:

routes.MapRoute(
    name: "MyCustomRoute", 
    url: "{controller}/{action}/{projectID}/{phraseID}", 
    defaults: new { controller = "Home", action = "Index", projectID = UrlParameter.Optional, phraseID= UrlParameter.Optional } 
); 

Тогда, например, у вас есть контроллер с именем проекта

public ActionResult CheckID(int projectID, int phraseID) { 
    ViewBag.projectID= projectID; 
    ViewBag.phraseID= phraseID; 
    if (...check my projectID is valid...) { 
    ... return to your project view ... 
    } else { 
    ... return to your phrase view ... 
    } 
} 

фактический URL будет что-то вроде этого

http://mydomain/Project/CheckID/1/2 
Смежные вопросы