Как я могу вызвать веб-сервис из С# с помощью HTTP POST
Я хочу написать класс С#, который создаст соединение с веб-сервисом, запущенным на www.temp.com, отправьте 2 строковых параметра в метод DoSomething и получите результат строки.
Я не хочу использовать wsdl. Поскольку я знаю параметры веб-службы, я просто хочу сделать простой вызов.
Я предполагаю, что должен быть простой и простой способ сделать это в .Net 2, но я не смог найти ни одного примера...
Ответы
Ответ 1
Если этот "webservice" является простым HTTP GET, вы можете использовать WebRequest:
WebRequest request = WebRequest.Create("http://www.temp.com/?param1=x¶m2=y");
request.Method="GET";
WebResponse response = request.GetResponse();
Оттуда вы можете посмотреть response.GetResponseStream для вывода. Вы можете использовать службу POST так же.
Однако, если это веб-сервис SOAP, это не совсем так просто. В зависимости от безопасности и параметров веб-службы иногда вы можете взять уже сформированный запрос и использовать его в качестве шаблона - заменить значения параметров и отправить его (используя webrequest), а затем разобрать ответ SOAP вручную... но в этом случае вы смотрите на много дополнительной работы, а можете просто использовать wsdl.exe
для создания прокси.
Ответ 2
Я бы изучил использование 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
Другим способом вызова метода 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);
Ответ 4
Вы можете вернуть использование объекта списка 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);