Всем привет.
Первый раз решил сделать constrain для роутинга.
Задача: для урлов вида
mysite/home?param1=x¶m2=y и
mysite/home?param1=x¶m2=y&mySpecialMode=true
настроить роуты, которые ведут в различные Action одного контроллера — MyController.Home() и MyController.HomeSpecial()
Используется System.Web.Routing.
В добавление роутов я добавил (перед своим сществующим роутом для Home) новый роут с новым именем,
с урлом вида mysite/home{sc} и constrain sc = @"\w*mySpecialMode=true\w*" .
Ожидал, что теперь по урлу mysite/home?param1=x¶m2=y&mySpecialMode=true буду приходить в MyController.HomeSpecial однако этого не происходит.
Подскажите пожалуйста, в чем может быть проблема?
Теоретически, я мог все правильно написать, просто продукт очень большой и сложный и где-то урл видоизменяется.. Но скорей всего я что-то напутал.
Заранее спасибо.
Constraints работают на уровне роутинга и query-string там не учитывается.
Проще всего сделать вот так:
public ActionResult Home(string param1, string param2, bool? mySpecialMode = false) {
if (mySpecialMode.GetValueOrDefault(false) == true) {
return HomeSpecial(param1, param2);
}
// TODO: Normal
}
protected ActionResult HomeSpecial(string param1, string param2) {
// TODO: Special
}
Здравствуйте, RushDevion, Вы писали:
RD>Constraints работают на уровне роутинга и query-string там не учитывается.
RD>Проще всего сделать вот так:
RD>RD>public ActionResult Home(string param1, string param2, bool? mySpecialMode = false) {
RD> if (mySpecialMode.GetValueOrDefault(false) == true) {
RD> return HomeSpecial(param1, param2);
RD> }
RD> // TODO: Normal
RD>}
RD>protected ActionResult HomeSpecial(string param1, string param2) {
RD> // TODO: Special
RD>}
RD>
Спасибо вам, я не знал, что query-string там не учитывается.