Параметры напрямую поддерживаются в MVC путем простого добавления параметров в методы действий. Учитывая действие, подобное следующему:
public ActionResult GetImages(string artistName, string apiKey)
MVC автоматически заполнит параметры при указании URL-адреса, например:
/Artist/GetImages/?artistName=cher&apiKey=XXX
Еще один особый случай - это параметры с именем «id». Любой параметр с именем ID может быть помещен в путь, а не в строку запроса, например:
public ActionResult GetImages(string id, string apiKey)
будет правильно заполнен URL-адресом, подобным следующему:
/Artist/GetImages/cher?apiKey=XXX
Кроме того, если у вас есть более сложные сценарии, вы можете настроить правила маршрутизации, которые MVC использует для поиска действия. Ваш файл global.asax содержит правила маршрутизации, которые можно настроить. По умолчанию правило выглядит так:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
Если вы хотите поддержать URL, например
/Artist/GetImages/cher/api-key
вы можете добавить такой маршрут:
routes.MapRoute(
"ArtistImages",
"{controller}/{action}/{artistName}/{apikey}",
new { controller = "Home", action = "Index", artistName = "", apikey = "" }
);
и метод, подобный первому примеру выше.
Начиная с MVC 5, вы также можете использовать маршрутизацию атрибутов, чтобы переместить конфигурацию параметра URL-адреса на ваши контроллеры.
Подробное обсуждение доступно здесь: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx
Резюме:
Сначала вы включаете маршрутизацию атрибутов
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes(); } }
Затем вы можете использовать атрибуты для определения параметров и, при необходимости, типов данных.
public class BooksController : Controller { // eg: /books // eg: /books/1430210079 [Route("books/{isbn?}")] public ActionResult View(string isbn)
источник
Вы можете передавать произвольные параметры через строку запроса, но вы также можете настроить собственные маршруты, чтобы обрабатывать их в режиме REST:
http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher& api_key=b25b959554ed76058ac220b7b2e0a026
Это могло быть:
routes.MapRoute( "ArtistsImages", "{ws}/artists/{artist}/{action}/{*apikey}", new { ws = "2.0", controller="artists" artist = "", action="", apikey="" } );
Итак, если кто-то использовал следующий маршрут:
ws.audioscrobbler.com/2.0/artists/cher/images/b25b959554ed76058ac220b7b2e0a026/
Это приведет их к тому же месту, что и ваша примерная строка запроса.
Вышеупомянутое является всего лишь примером и не применяет бизнес-правила и ограничения, которые вы должны были бы установить, чтобы люди не «взламывали» URL-адрес.
источник