C# 基于HTTP的Web服务XML
我正在尝试使用一个不使用SOAP和WSDL的web服务,但我不知道如何做到这一点。我真的很想得到一些建议 该服务的API为: 其中id是参数 支持的请求方法是GET 我可以用这样的东西吗:C# 基于HTTP的Web服务XML,c#,.net,xml,web-services,http,C#,.net,Xml,Web Services,Http,我正在尝试使用一个不使用SOAP和WSDL的web服务,但我不知道如何做到这一点。我真的很想得到一些建议 该服务的API为: 其中id是参数 支持的请求方法是GET 我可以用这样的东西吗: var myReq = new XMLHttpRequest(); var url = "http://someaddress.com/webservices/name/2" myReq.open("GET", url, true); myReq.send(); 这里有一段代码可以帮助你做到这一点 publ
var myReq = new XMLHttpRequest();
var url = "http://someaddress.com/webservices/name/2"
myReq.open("GET", url, true);
myReq.send();
这里有一段代码可以帮助你做到这一点
public static string SendRequest(string uri, string method, string contentType, string body)
{
string responseBody = String.Empty;
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(uri));
req.Method = method;
if (!String.IsNullOrEmpty(contentType))
{
req.ContentType = contentType;
}
if (!String.IsNullOrEmpty(body))
{
byte[] bodyBytes = Encoding.UTF8.GetBytes(body);
req.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
req.GetRequestStream().Close();
}
HttpWebResponse resp;
try
{
resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException e)
{
resp = (HttpWebResponse)e.Response;
}
Stream respStream = resp.GetResponseStream();
if (respStream != null)
{
responseBody = new StreamReader(respStream).ReadToEnd();
}
return responseBody;
}
这里有一段代码可以帮助你做到这一点
public static string SendRequest(string uri, string method, string contentType, string body)
{
string responseBody = String.Empty;
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(uri));
req.Method = method;
if (!String.IsNullOrEmpty(contentType))
{
req.ContentType = contentType;
}
if (!String.IsNullOrEmpty(body))
{
byte[] bodyBytes = Encoding.UTF8.GetBytes(body);
req.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
req.GetRequestStream().Close();
}
HttpWebResponse resp;
try
{
resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException e)
{
resp = (HttpWebResponse)e.Response;
}
Stream respStream = resp.GetResponseStream();
if (respStream != null)
{
responseBody = new StreamReader(respStream).ReadToEnd();
}
return responseBody;
}
WebClient对象对于这类任务做得非常好。WebClient对象对于这类任务做得非常好。获取xml的最简单方法是使用url作为XDocument.Load()方法的参数 此方法从远程url获取数据,使用XmlReader解析数据,然后构造XDocument对象。然后,您可以使用LINQ转换为XML来查询或转换数据 不幸的是,这不适用于POST、DELETE、PUT http请求 编辑: 这取决于您的服务以及您可以使用它执行的操作:
XDocument.Load()
是最简单的解决方案。如果这是internet上的一个简单资源,没有身份验证,不需要HTTp头,只支持GET请求,那么这就是解决方法。您可以编写一个方法,该方法接受您的参数并将它们附加到URL中
public SomeClass GetSomeEntity(string id)
{
var xml = XDocument.Load("http://mywebservice.com/ws/" + id);
// transform xml into an instance of actual type
}
using (var client = new WebClient())
{
var xml = XDocument.Load(client.OpenRead("http://yoururl.com");
// process xml
}
获取xml的最简单方法是将url用作XDocument.Load()方法的参数 此方法从远程url获取数据,使用XmlReader解析数据,然后构造XDocument对象。然后,您可以使用LINQ转换为XML来查询或转换数据 不幸的是,这不适用于POST、DELETE、PUT http请求 编辑: 这取决于您的服务以及您可以使用它执行的操作:
XDocument.Load()
是最简单的解决方案。如果这是internet上的一个简单资源,没有身份验证,不需要HTTp头,只支持GET请求,那么这就是解决方法。您可以编写一个方法,该方法接受您的参数并将它们附加到URL中
public SomeClass GetSomeEntity(string id)
{
var xml = XDocument.Load("http://mywebservice.com/ws/" + id);
// transform xml into an instance of actual type
}
using (var client = new WebClient())
{
var xml = XDocument.Load(client.OpenRead("http://yoururl.com");
// process xml
}
查看-它向您展示了使用WCF基础设施创建REST服务(无SOAP)的方便性和效率。查看-它向您展示了使用WCF基础设施创建REST服务(无SOAP)的方便性和效率。据我所知,使用JQuery是最简单的。如果这在您的情况下有效,请尝试:
var param = new Object();
param.id = 2;
$.ajax({
type: "GET",
url: "http://someaddress.com/webservices/name",
data: $.toJSON(param),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
if (msg.d) {
//do something
}
}
});
据我所知,使用JQuery是最简单的。如果这在您的情况下有效,请尝试:
var param = new Object();
param.id = 2;
$.ajax({
type: "GET",
url: "http://someaddress.com/webservices/name",
data: $.toJSON(param),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
if (msg.d) {
//do something
}
}
});
谢谢与AJC的示例相比,使用这个非常简单的方法有什么缺点吗?您没有控制公开的http请求:没有自定义头,没有基本的身份验证,没有异步方法。然而,如果这是一个简单的资源在互联网上,你只能“获取”它与参数在您的url比这更简单solution@Andy如果XDocument.Load满足了您的需求,那么Vasile是正确的,这是获取xml的最简单形式。这两种方法都有效,请为自己选择合适的方法,不要忘记选择一个解决方案,这样其他偶然发现这个问题的人也可以从中受益+为了简单起见,谢谢!与AJC的示例相比,使用这个非常简单的方法有什么缺点吗?您没有控制公开的http请求:没有自定义头,没有基本的身份验证,没有异步方法。然而,如果这是一个简单的资源在互联网上,你只能“获取”它与参数在您的url比这更简单solution@Andy如果XDocument.Load满足了您的需求,那么Vasile是正确的,这是获取xml的最简单形式。这两种方法都有效,请为自己选择合适的方法,不要忘记选择一个解决方案,这样其他偶然发现这个问题的人也可以从中受益+1为简单起见。