Как я могу вызвать веб-сервис из C # с HTTP POST - PullRequest
19 голосов
/ 10 октября 2010

Я хочу написать класс c #, который создаст соединение с веб-сервисом, работающим на www.temp.com, отправит 2 строковых параметра в метод DoSomething и получит строковый результат. Я не хочу использовать WSDL. Поскольку я знаю параметры веб-службы, я просто хочу сделать простой вызов.

Полагаю, в .Net 2 должен быть простой и простой способ сделать это, но я не смог найти ни одного примера ...

Ответы [ 4 ]

23 голосов
/ 10 октября 2010

Если этот «веб-сервис» является простым HTTP GET, вы можете использовать WebRequest :

WebRequest request = WebRequest.Create("http://www.temp.com/?param1=x&param2=y");
request.Method="GET";
WebResponse response = request.GetResponse();

Оттуда вы можете посмотреть response.GetResponseStream длявыход.Вы можете использовать POST-сервис таким же образом.

Однако, если это веб-сервис SOAP, это не так просто.В зависимости от безопасности и параметров веб-службы, иногда вы можете взять уже сформированный запрос и использовать его в качестве шаблона - заменить значения параметров и отправить его (с помощью веб-запроса), а затем проанализировать ответ SOAP вручную ... но в этом случаевы ищете много дополнительной работы, а можете использовать wsdl.exe для генерации прокси.

11 голосов
/ 10 октября 2010

Я хотел бы изучить использование ASP.NET MVC для вашего веб-сервиса.Вы можете предоставить параметры через стандартные параметры формы и вернуть результат в формате JSON.

[HttpPost]
public ActionResult MyPostAction( string foo, string bar )
{
     ...
     return Json( new { Value = "baz" } );
}

В вашем клиенте используйте HttpWebRequest

var request = WebRequest.Create( "/controller/mypostaction" );
request.Method = "POST";
var data = string.Format( "foo={0}&bar={1}", foo, bar );
using (var writer = new StreamWriter( request.GetRequestStream() ))
{
    writer.WriteLine( data );
}
var response = request.GetResponse();
var serializer = new DataContractJsonSerializer(typeof(PostActionResult));
var result = serializer.ReadObject( response.GetResponseStream() )
                 as PostActionResult;

, где у вас есть

public class PostActionResult
{
     public string Value { get; set; }
}
3 голосов
/ 05 июля 2015

Еще один способ вызова метода POST, я использовал для вызова метода POST в WebAPI.

            WebClient wc = new WebClient();

            string result;
            wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            result = wc.UploadString("http://localhost:23369/MyController/PostMethodName/Param 1/Param 2","");

            Response.Write(result);
1 голос
/ 25 декабря 2016

Вы можете вернуть объект List, используя Newtonsoft.Json:

WebClient wc = new WebClient();
  string result;
  wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
  var data = string.Format("Value1={0}&Value2={1}&Value3={2}", "param1", "param2", "param3");
  result = wc.UploadString("http:your_services", data);
  var ser = new JavaScriptSerializer();
  var people = ser.Deserialize<object_your[]>(result);
...