Маршрутизация унаследованных запросов с querystring и без querystring

(Прежде чем начать: Я знаю о this и this. Я хотел бы найти более краткое решение - если это возможно - для немного более конкретной проблемы)

Я переписываю старое приложение Webforms на MVC. Как обычно, никакие пермалинки не должны быть нарушены.

Я использую стандартные {controller}/{action}/{id} пути. Наследственные пути обычно SomePage.aspx?ID=xxx, и у меня есть один конкретный случай, когда Foo.aspx является списком Bar (новый URL: /Bar или /Bar/Index) и Foo.aspx? ID=xxx является деталью Bar (новый URL: /Bar/View/xxx)

Одним из возможных обходных путей является добавление следующего перед Default MapRoute:

routes.MapRoute("Bar View", "Foo.aspx",
                new { controller = "Bar", action = "View" });

А затем определение соответствующего действия в BarController:

public ActionResult View(int? id)
{
    if (id == null)
        return RedirectToAction("Index");
    return View();
}

С этим есть две проблемы:

  • Теперь, если я создаю ActionLink, он использует старый формат
  • Я бы хотел обрабатывать это в маршрутах; делать id nullable и перенаправлять в контроллере просто неправильно

Я не против отображения старых URL вручную (мне не нужно общее решение, и есть только около 8 страниц)

Это новый проект, поэтому я ни к чему не привязан.

6
задан Community 23 May 2017 в 10:34
поделиться