我使用以下代码从服务中获取json结果。它适用于get
方法。但是当方法类型为POST
时,请求地址将更改为先前的地址。
即;
首次调用此方法时,request.address = XXXXX.com:1234/xxx/oldv1.json
(方法类型为get
)
并返回一个json字符串,我从中提取另一个地址:XXXXX.com:1234/xxx/newv1.json
现在我用这个端点和方法类型调用makerequest方法POST,contenttype =“application / x-www-form-urlencoded”。
当我在using (var response = (HttpWebResponse)request.GetResponse())
放置breakpint并检查request.address值时,它是XXXXX.com:1234/xxx/newv1.json
但是在执行该行之后,地址将更改为XXXXX.com:1234/xxx/oldv1.json
,并且该函数返回与第一个端点(XXXXX.com:1234/xxx/oldv1.json
)相同的响应。
谁能告诉我这里做错了什么?
有没有更好的方法来使用POST方法来使用服务?
public string MakeRequest(string EndPoint,string Method, string contentType)
{
var request = (HttpWebRequest)WebRequest.Create(EndPoint);
request.Method = Method;
request.ContentLength = 0;
request.ContentType =contentType;
if ( Method == HttpVerb.POST)
{
var encoding = new UTF8Encoding();
var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes("username=123&password=123");
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
using (var response = (HttpWebResponse)request.GetResponse())// request.address changes at this line on "POST" method types
{
var responseValue = string.Empty;
if (response.StatusCode != HttpStatusCode.OK)
{
var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
// grab the response
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
return responseValue;
}
编辑:昨天我问THIS Question有关在客户端使用该服务的问题,许多人建议需要在服务器端完成,因为其他域可能不允许访问json结果客户端。
答案 0 :(得分:1)
问题是关于cookie。当我忘记设置cookie时,请求被重定向。我必须使用
设置cookie容器 request.CookieContainer = new CookieContainer();