2016-11-15 2 views
1

У меня есть приложение MVC, и команда пользовательского интерфейса запросила, чтобы URL-адреса для страницы с карьерой соответствовали этому формату: mydomain.com/careers/{jobTitle}/{JobCode}. Я могу сделать это в контроллере карьеры, как это:Как работать с неиспользуемыми параметрами маршрутизации MVC

public ActionResult Detail(string jobTitle, string jobCode) 
    { 
     var model = getModelFromDb(JobCode); 
     return View(model); 
    } 

Проблема заключается в том, что мы ищем информацию карьеры кода работы не название, чтобы мы в конечном итоге с неиспользуемым параметром. Я не думаю, что это лучшая практика. Тем более, что вы можете ввести все, что хотите для названия карьеры, и получить детали работы. Такой URL-адрес все равно будет работать: mydomain.com/careers/yourmom/1234.

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

Есть ли лучший способ реализовать дополнительный параметр в URL-адресе и не допускать ввода недопустимых названий заданий в URL-адрес?

+1

Одна вещь, которую вы могли бы попробовать, это сделать jobTitle необязательным, но это означает изменение формата URL-адреса на {JobCode}/{jobTitle}, и я думаю, что это не вариант? – Zippy

+1

взгляните на этот вопрос и ответ http://stackoverflow.com/questions/24678045/routing-optional-parameters-in-asp-net-mvc-5. может использовать необязательный параметр в маршрутизации – Emil

+1

Я предполагаю, что вам может понадобиться маршрут «slug» (где включение только «jobCode» приведет к URL-адресу с «кодом задания» и «jobTitle»)? Если да, обратитесь [этот ответ] (http://stackoverflow.com/questions/30349412/how-to-implement-url-rewriting-similar-to-so/30363600#30363600) –

ответ

0

То, что мы в конечном итоге делает это прохождение обоих параметров контроллера (jobTitle и jobCode), глядя на рекорд по jobCode , и проверка того, что слизь записи совпадает с переданным в jobTitle (нечувствительным к регистру). Таким образом мы препятствуем фиктивным URL-адресам возвращать страницы подробностей о работе, и мы поддерживаем команду пользовательского интерфейса счастливой.

2

Вы можете создать your own custom route constraint, это позволит сопоставлять только маршруты, содержащие название jobtyitle, соответствующее коду задания.

Вам необходимо наследовать от интерфейса IRouteConstraint и реализовать метод Match. Один из параметров, который принимает метод, - RouteValueDictionary.

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

See this example for more info.

Таким образом, вы будете иметь возможность получить только правильные маршруты и отклонять неправильные маршруты как mydomain.com/careers/yourmom/1234

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