Можно ли вызвать службу ASMX с параметром через строку запроса URL? - PullRequest
21 голосов
/ 05 января 2010

У меня есть служба asmx, которая принимает один параметр int. Я могу открыть URL-адрес сервиса и увидеть экран описания сервиса. Отсюда я могу ввести параметры запроса в форму и вызвать веб-сервис.

Есть ли способ вызвать веб-сервис напрямую из URL / строки запроса?

Это не работает:

http://localhost:4653/MyService.asmx?op=MyWebMethod&intParameter=1

Есть идеи? Мне бы очень хотелось сделать это по стандартной ссылке из-за некоторых проблем с развертыванием. Я собираюсь обернуть запрос в нормальную страницу aspx?

Ответы [ 2 ]

45 голосов
/ 05 января 2010

Вы можете украсить свой метод, чтобы разрешить запросы HTTP GET, которые, в свою очередь, должны делать то, что вы ищете, так:

[WebMethod]  
[ScriptMethod(UseHttpGet=true)]
public string MyNiftyMethod(int myint)
{
    // ... code here
}

И отредактируйте файл web.config:

<system.web>
<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>

Тогда вы сможете вызывать этот метод примерно так:

http://mysite.com/Service.asmx/MyNiftyMethod?myint=12345

РЕДАКТИРОВАТЬ: обратите внимание, что этот метод выполнения запросов GET имеет некоторые риски для безопасности. Согласно документации MSDN для UseHttpGet :

Установка свойства UseHttpGet в true может представлять угрозу безопасности для ваше приложение, если вы работаете с конфиденциальными данными или транзакциями. В запросах GET сообщение закодирован браузером в URL и, следовательно, является более легкой целью для фальсификации.

9 голосов
/ 05 января 2010

Веб-сервисы ASMX используют SOAP. SOAP-запросы используют только POST для вызова методов. Вам нужно будет сгенерировать прокси-клиент на своей странице aspx, чтобы вызвать веб-сервис. Если вам действительно нужно использовать глаголы GET для вызова веб-сервисов, вам может понадобиться другой подход, такой как WCF REST .

...