#asp.net-mvc #asp.net-mvc-3 #routes
#asp.net-mvc #asp.net-mvc-3 #маршруты
Вопрос:
Два простых маршрута mvc3, имя пользователя и значение по умолчанию охватывают все.
routes.MapRoute(
"Users",
"{username}",
new { controller = "User", action = "Index"}
);
routes.MapRoute(
"Default",
"{*url}",
new { controller = "Default", action = "Index" }
);
Как заставить пользовательский маршрут принимать какие-либо дополнительные параметры запроса, такие как /username?ссылка =facebook
Этот пример просто указывает на маршрут по умолчанию…
РЕДАКТИРОВАТЬ: МОЙ ПЛОХОЙ, был немного удивлен этим, поскольку он не должен заботиться о параметрах запроса. Решение = очистить и перестроить проект.
Ответ №1:
Обновите свой первый маршрут следующим образом:
routes.MapRoute(
"Users",
"/username",
new { controller = "User", action = "Index"}
);
В вашем действии контроллера добавьте параметр «ref», чтобы он MVC автоматически передавал строку запроса «ref» вашему контроллеру.
Ответ №2:
Параметры строки запроса, такие как ?ref=
, не являются частью определения сегмента маршрута. Например, маршрут, подобный:
routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = "Home", action = "Index"}
);
Все равно будет соответствовать URL, например: /Home/Index?ref=facebook
.
Таким образом, вам не нужно изменять свои маршруты для размещения специальной строки запроса. Обработка их в ваших действиях / контроллере — это совсем другая история, потому что вам придется следовать соглашению и соглашению CoC в отношении рекомендаций по настройке и сопоставлять параметр строки запроса в ваших действиях.
Ответ №3:
Добавьте параметр в маршрут и не забудьте добавить его в свое действие. Я бы предложил добавить что-то в начало URL-адресов, чтобы сделать его немного более конкретным (на случай, если вы добавите какие-либо другие маршруты в свой проект) Пример
routes.MapRoute(
"Users",
"users/{username}/{ref}",
new { controller = "User", action = "Index", ref = UrlParameter.Optional }
);
и в вашем действии вы хотели бы
public ActionResult Index(ref)
{
if (string.IsNullOrEmpty(ref))
{
//TODO: add your logic here
}
}
Это должно принимать /users/someusername/facebook.com ИЛИ /users/someusername?ref=facebook.com