首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于C#通过HttpWebRequest调用web api 接口post 传参的有关问题

2013-11-09 
关于C#通过HttpWebRequest调用web api 接口post 传参的问题场景是 winform程序通过HttpWebRequest 调用web

关于C#通过HttpWebRequest调用web api 接口post 传参的问题
场景是 winform程序通过HttpWebRequest 调用web Api 接口
其中参数没传过去,有做过这东西的,给点建议。
下面贴代码;


  

 /// <summary>  
        /// 创建POST方式的HTTP请求  
        /// </summary>  
        /// <param name="url">请求的URL</param>  
        /// <param name="parameters">随同请求POST的参数名称及参数值字典</param>  
        /// <param name="timeout">请求的超时时间</param>  
        /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
        /// <param name="requestEncoding">发送HTTP请求时所用的编码</param>  
        /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
        /// <returns></returns>  
        public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }
            if (requestEncoding == null)
            {
                throw new ArgumentNullException("requestEncoding");
            }
            HttpWebRequest request = null;
            //如果是发送HTTPS请求  
            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                request = WebRequest.Create(url) as HttpWebRequest;
                request.ProtocolVersion = HttpVersion.Version10;
            }
            else
            {
                request = WebRequest.Create(url) as HttpWebRequest;
            }
            request.Method = "POST";
            
            request.Headers.Add("X_REG_CODE", "288a633ccc1");
            request.Headers.Add("X_MACHINE_ID", "a306b7c51254cfc5e22c7ac0702cdf87");
            request.Headers.Add("X_REG_SECRET", "de308301cf381bd4a37a184854035475d4c64946");
            request.Headers.Add("X_STORE", "0001");
            request.Headers.Add("X_BAY", "0001-01");
            request.Headers.Add("X-Requested-With", "XMLHttpRequest");
            request.ContentType = "application/x-www-form-urlencoded";
            request.Headers.Add("Accept-Language", "zh-CN");
            request.Headers.Add("Accept-Encoding", "gzip, deflate");
            request.Accept = "*/*";
            
            if (!string.IsNullOrEmpty(userAgent))
            {
                request.UserAgent = userAgent;


            }
            else
            {
                request.UserAgent = DefaultUserAgent;
            }

            if (timeout.HasValue)
            {
                request.Timeout = timeout.Value;
            }
           // if (cookies != null)
           // {
                request.CookieContainer = new CookieContainer();
               // request.CookieContainer.Add(cookies);
           // }
            //如果需要POST数据  
            if (!(parameters == null || parameters.Count == 0))
            {
                StringBuilder buffer = new StringBuilder();
                int i = 0;
                foreach (string key in parameters.Keys)
                {
                    if (i > 0)
                    {
                        buffer.AppendFormat("&{0}={1}", key, parameters[key]);
                    }
                    else
                    {
                        buffer.AppendFormat("{0}={1}", key, parameters[key]);
                    }
                    i++;
                }

                byte[] data = requestEncoding.GetBytes(buffer.ToString());
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }              
            }   
            HttpWebResponse res;
            try
            {
                res = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }

            return res;
        }



下面是调用代码

   public string GetCookies()
        {
           

            string url = "http://localhost:17766/Account/LogOn";



            IDictionary<string, string> parameters = new Dictionary<string, string>();
            parameters.Add("StoreCode", "0001");
            parameters.Add("UserName", "T00000");
            parameters.Add("Password", "123456");

            

            //string postData = "StoreCode=0001&UserName=T00000&Password=123456";

            //HttpWebResponseUtility.PostData(postData, url, null);



            Encoding encoding = Encoding.GetEncoding("gb2312"); 

            HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(url, parameters, null, null, encoding, null);



            String xml = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();

            return xml;

        }

HttpWebRequest post 传参
[解决办法]
建议用Microsoft.AspNet.WebApi.Client调用web Api 接口

http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
[解决办法]
用nuget 安装 Web API 客户端库
[解决办法]
你网页访问的时候,post的应该是一个字符串,用fiddler抓取发送内容看一下实际发送的内容是啥,顺便检查一下Header对不对
string postdata = "email=" + email + "&password=" + passwd + "&origURL=" + "http://www.renren.com/SysHome.dom" + "&domain=renren.com";

热点排行