Маршрут MVC, параметры запроса

#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