2009-10-13 3 views
1

Из-за факторов, находящихся вне моего контроля, мне нужно обрабатывать URLs так:Как маршрут URLs наследие типа в ASP.NET MVC

Я хотел бы направить их к конкретный контроллер/действие с уже проанализированным и привязанным значением val (т. е. аргументом для действия).

В идеале мое действие будет выглядеть следующим образом:

ActionResult BackwardCompatibleAction(int val) 

Я нашел этот вопрос: ASP.Net MVC routing legacy URLs passing querystring Ids to controller actions но переадресовывает не являются приемлемыми.

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

я смог направить запрос с этим:

routes.MapRoute(
    "dosomething.asp Backward compatibility", 
    "{dosomething}.asp", 
    new { controller = "MyController", action = "BackwardCompatibleAction"} 
); 

Однако оттуда единственный путь, чтобы добраться до значения Валу =? через Request.QueryString. Хотя я мог анализировать строку запроса внутри контроллера, это затрудняло бы тестирование действия, и я бы предпочел не иметь этой зависимости.

Я чувствую, что есть что-то, что я могу сделать с маршрутизацией, но я не знаю, что это такое. Любая помощь будет очень оценена.

ответ

3

Параметр val в вашем методе BackwardCompatibleAction должен быть автоматически заполнен значением строки запроса. Маршруты не предназначены для обработки строк запроса. Решение, которое вы указали в своем вопросе, подходит мне. Вы попробовали это, чтобы посмотреть, что произойдет?

Это также будет работать для вашего маршрута. Поскольку вы указываете как контроллер, так и действие, вам не нужен параметр фигурной фигурной скобки.

routes.MapRoute(
    "dosomething.asp Backward compatibility", 
    "dosomething.asp", 
    new { controller = "MyController", action = "BackwardCompatibleAction"} 
); 

Если вам нужно параметризуем имя действия, то что-то подобное должно работать:

routes.MapRoute(
    "dosomething.asp Backward compatibility", 
    "{action}.asp", 
    new { controller = "MyController" } 
); 

Это даст вам более общий маршрут, который может соответствовать несколько различных страниц .asp адресов в методах действий ,

http://www.bob.com/dosomething.asp?val=42 бы путь к MyController.dosomething(int val)

и http://www.bob.com/dosomethingelse.asp?val=42 бы путь к MyController.dosomethingelse(int val)

+0

шанс. Я попробовал, и это сработало. Шоуда просто попробовал. Благодаря!!! –

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