Наша компания разрабатывает API для наших продуктов, и мы думаем об использовании ASP.NET MVC. При разработке нашего API мы решили использовать вызовы как тот ниже, чтобы пользователь запросил информацию у API в формате XML:
Как Вы видите, несколько параметров передаются (т.е. artist
и api_key
). В ASP.NET MVC, artist
был бы controller
, getImages
действие, но как я передал бы несколько параметров действию?
Действительно ли это ровное возможное использование является форматом выше?
Параметры напрямую поддерживаются в 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", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Если вы хотите поддерживать URL-адрес типа
/Artist/GetImages/cher/api-key
, вы можете добавить такой маршрут, как:
routes.MapRoute(
"ArtistImages", // Route name
"{controller}/{action}/{artistName}/{apikey}", // URL with parameters
new { controller = "Home", action = "Index", artistName = "", apikey = "" } // Parameter defaults
);
, и метод, подобный первому примеру выше.
Вы можете передавать произвольные параметры через строку запроса, но вы также можете настроить пользовательские маршруты для обработки их RESTful способом:
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.