Маршрутизация с использованием нескольких параметров ASP.NET MVC
наша компания разрабатывает API для наших продуктов, и мы думаем об использовании ASP.NET MVC. При разработке нашего API мы решили использовать вызовы, подобные приведенному ниже, чтобы пользователь мог запрашивать информацию из API в формате XML:
как вы можете видеть, несколько параметров передаются (т. е. artist
и api_key
). In ASP.NET MVC, artist
будет controller
,getImages
действие, но как я могу передать несколько параметров в действие?
это вообще возможно, используя формат выше?
3 ответа:
параметры напрямую поддерживаются в 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 использует для поиска действий. Ваш глобальный.файл 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 );
и метод, как в первом примере выше.
вы можете передавать произвольные параметры через строку запроса, но вы также можете настроить пользовательские маршруты для обработки его в спокойном режиме:
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/
это приведет их к тому же месту, что и ваш пример querystring.
выше приведен только пример, и не применяются бизнес-правила и ограничения, которые вы должны были бы настроить, чтобы убедиться, что люди не "взломать" URL-адрес.
начиная с 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)