Как я могу добавить маршрут в контроллере - PullRequest
0 голосов
/ 25 января 2012

Я хотел бы отобразить новый маршрут после того, как я добавлю новый объект в базу данных. Так, например, если я ввожу объект с именем " Test ", я хотел бы немедленно получить новый маршрут для разрешения " Test.aspx ".

Я пытался

System.Web.Routing.RouteTable.Routes.MapRoute(obj.NameUrl, obj.NameUrl + extension, new { controller = "per", action = "Index", name = obj.NameUrl });

в контроллере, но он не работает (без ошибок, просто, вероятно, не в нужное время в жизненном цикле?). Тот же код работает в Application_Start()

1 Ответ

3 голосов
/ 25 января 2012

Вам следует избегать динамической регистрации маршрутов.Следующий статический маршрут в вашем Application_Start должен быть в состоянии обработать ваш сценарий с параметрами динамического маршрута:

routes.MapRoute(
    "page",
    "{name}.aspx",
    new { controller = "per", action = "index" },
    new { name = @"[a-z0-9]+" }
);

, и если расширение должно быть динамическим:

routes.MapRoute(
    "page",
    "{name}.{extension}",
    new { controller = "per", action = "index" },
    new { name = @"[a-z0-9]+", extension = @"[a-z]{3,4}" }
);

и тогда у вас может быть действие Index для обработки запросов к этому маршруту:

public class PerController: Controller
{
    public ActionResult Index(string name, string extension) 
    {
        ...    
    }
}

и если вы хотите сгенерировать ссылку на это действие:

@Html.RouteLink("go to foo", "page", new { name = "foo", extension = "aspx" })
...