Routing constraints - работает ли
От: Sarevok  
Дата: 08.07.18 07:31
Оценка:
Всем привет.

Первый раз решил сделать constrain для роутинга.
Задача: для урлов вида
mysite/home?param1=x&param2=y и
mysite/home?param1=x&param2=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&param2=y&mySpecialMode=true буду приходить в MyController.HomeSpecial однако этого не происходит.
Подскажите пожалуйста, в чем может быть проблема?
Теоретически, я мог все правильно написать, просто продукт очень большой и сложный и где-то урл видоизменяется.. Но скорей всего я что-то напутал.
Заранее спасибо.
Re: Routing constraints - работает ли
От: RushDevion Россия  
Дата: 08.07.18 10:05
Оценка: 2 (1)
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 
}
Re[2]: Routing constraints - работает ли
От: Sarevok  
Дата: 09.07.18 08:03
Оценка:
Здравствуйте, 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 там не учитывается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.