Маршрутизация с Несколькими Параметрами с помощью ASP.NET MVC

Наша компания разрабатывает API для наших продуктов, и мы думаем об использовании ASP.NET MVC. При разработке нашего API мы решили использовать вызовы как тот ниже, чтобы пользователь запросил информацию у API в формате XML:

http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&api_key=b25b959554ed76058ac220b7b2e0a026

Как Вы видите, несколько параметров передаются (т.е. artist и api_key). В ASP.NET MVC, artist был бы controller, getImages действие, но как я передал бы несколько параметров действию?

Действительно ли это ровное возможное использование является форматом выше?

133
задан George Stocker 11 February 2010 в 18:37
поделиться

2 ответа

Параметры напрямую поддерживаются в 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
        );

, и метод, подобный первому примеру выше.

274
ответ дан 24 November 2019 в 00:00
поделиться

Вы можете передавать произвольные параметры через строку запроса, но вы также можете настроить пользовательские маршруты для обработки их 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.

21
ответ дан 24 November 2019 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: