繁体   English   中英

使用C#代码使用REST服务

[英]Consuming REST service with C# code

我正在使用以下代码从服务获取json结果。 它对于get方法很好用。 但是,当方法类型为POST ,请求地址将更改为先前的地址。

即;

在第一次调用此方法时,request.address = XXXXX.com:1234/xxx/oldv1.json (方法类型为get

它返回一个json字符串,我从中提取另一个地址: XXXXX.com:1234/xxx/newv1.json : XXXXX.com:1234/xxx/newv1.json ,现在我使用此端点和方法类型POST调用makerequest方法,contenttype =“ application / x-www-form- urlencoded的”。

当我在using (var response = (HttpWebResponse)request.GetResponse())并检查request.address值时使用XXXXX.com:1234/xxx/newv1.json ,它是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;
                }

编辑:昨天我问这个问题有关在客户端使用服务,许多建议它需要在服务器端完成,因为另一个域可能不允许在客户端访问json结果。

问题是关于cookie。 由于我忘记设置cookie,因此请求已被重定向。 我不得不通过使用来设置cookie容器

 request.CookieContainer = new CookieContainer();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM