我有API,我需要以XML格式发送请求以获得响应(在XML中也是如此)。我认为这称为SOAP API但我不确定所以我在这里插入我发送的内容。
请求应如下所示:
<request>
<login>name</login>
<password>password</password>
<hotId>1</hotId>
</request>
我应该将其发送到此网址以获得回复:https://api.xxx.com/v1/hotel/get
这是如何使用php和curl:
<?php
$login = '*****';
$password = '*****';
$request =
'<?xml version="1.0"?>' . "\n" .
'<request>' .
'<login>' . htmlspecialchars($login) . '</login>' .
'<password>' . htmlspecialchars($password) . '</password>' .
'<hotId>1</hotId>' .
'</request>';
$ch = curl_init('https://api.xxx.com/x1/hotel/get');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
echo "<pre>\n";
echo htmlspecialchars($response);
echo "</pre>";
那么在C#中如何做到这一点的最佳方法是什么?
我试过这样的事情,但是没有用,我认为必须有更好的方法。
System.Net.WebRequest req = System.Net.WebRequest.Create(@"https://api.xxx.com/v1/hotel/get");
req.ContentType = "text/xml";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes("<?xml version=\"1.0\"?><request><login>login</login><password>pass</password><hotId>1</hotId></request>");
req.ContentLength = bytes.Length;
Stream os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
System.Net.WebResponse resp = req.GetResponse();
if (resp == null) return;
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
string responsecontent = sr.ReadToEnd().Trim();
编辑: 获取使用wsdl.exe生成的方法。我在这里缺少登录和密码params到新对象[]但不知道如何添加它们。
[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://api.xxx.com/v1/hotel/get", RequestNamespace="http://api.xxx.com/v1/hotel/", ResponseNamespace="http://api.xxx.com/v1/hotel/", Use=System.Web.Services.Description.SoapBindingUse.Literal)]
[return: System.Xml.Serialization.XmlElementAttribute("hotel")]
public hotelType get(int hotId) {
object[] results = this.Invoke("get", new object[] {
hotId});
return ((hotelType)(results[0]));
}
构造
public HotelService() {
this.Url = "http://api.xxx.com/v1/hotel/";
}
答案 0 :(得分:3)
您描述的通信模式是SOAP服务。
在.NET中,使用其中一种服务的最简单方法是使用WSDL(Web服务定义语言)文件。此文件包含有关公开Web服务的元数据:它所在的位置,可用的方法,方法生成和接受的数据类型,应使用的传输层和/或安全层等。
您应该能够从Web服务提供商处获取WSDL;您可以下载它或从其托管位置引用它。获得此文件或知道其位置后,您只需进入VS,右键单击包含需要使用Web服务的代码的项目,然后单击“添加服务引用...”。然后键入WSDL的位置(这是为了查找托管的WSDL文件,而不是您托管的文件,但它将以两种方式工作),您应该看到有关该服务的信息。单击OK,VS将自动生成代理类和所需的任何自定义数据类型,这些类型在调用时将形成并传输正确的SOAP消息并等待响应。
然后,您只需新建一个服务实例,就像任何一个类一样使用它。
答案 1 :(得分:0)
我实际上已经使用SOAP做了类似的事情,这就是我如何使用它。首先,右键单击您的项目,然后选择“添加服务引用”。输入SOAP Web服务的URL,Visual Studio应自动生成所需的所有方法。从那里,通过添加using namespace.servicereferencename;
将其包含在当前类中。查看对象浏览器以获取服务引用并找出客户端名称。然后你可以这样做:
string request = xmlrequest;
SOAPclient client = new SOAPclient();
string response = client.methodName(request);
就这么简单。