zoukankan      html  css  js  c++  java
  • ASP使用webRequest实现跨域请求

    前两天突然有个需求需要用到跨域提交数据。之前也在网上找到了好多的代码例子看了的。常用的是jsonp去实现跨域,但是jsonp值支持get方式提交。这样就造成了问题,后来我同事告诉我可以用服务端去做也就是webRequest去实现。我自己研究了一下,实现了之后 来写一篇文章总结一下我的经验。

      希望也可以和你们分享一下。

    首先是html页面的数据传输,这个提交的方式我就不用讲了,ajax  表单 都可以。重点在后台代码怎么去把数据传输到另外一个站点。

     1        public ActionResult OpenReadWithHttps(string username, string email, string sex)
     2         {
     3             string url = "https://***********************"; //这里是你请求的地址 或者说是提供给你的接口,同时还又会提交的格式。
     4             var jss = new JavaScriptSerializer();//这个可以理解为把model变为一个json字符串
     6             var model = new UserModel();
     7           //实例化model 给model赋值,然后去调用。 9             model.Username = username;11             model.Email = email;13             model.Sex = sex;
    19            string temp = HttpPost(url, jss.Serialize(model));
    22             return Json(temp, JsonRequestBehavior.AllowGet);
    23         }

    接下的这段代码才是重点。。

           private string HttpPost(string Url, string postDataStr)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                request.Method = "POST";
                request.ContentType = "application/json";

    //request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); //var str = Encoding.GetEncoding("UTF-8"); //request.ContentLength = str.GetByteCount(postDataStr);

    Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("UTF-8")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }

      上面的这个方法就是把你的参数用webRequest的方式传输给对应的接口。

    这个方法呢 我刚开始用的是gbk2312的格式去提交到接口。提交后我这边返回的是成功了。但是接口那边保存的汉字就是一堆乱码。。然后就改成UTF-8

    改成UTF-8之后问题就来了,我这边的数据就传输不过去了。。当时就跪在这里了。到网上找了半天 也没找到自己想要的答案。然后我就尝试的注释的那三行转化格式的代码(就上面那个方法注释的).

    没想到 注释之后居然成功了。。果然运气也是实力的一部分。。然后又去找为何把值转换之后会出错。。答案就是 字符串转换的时候长度居然会丢失。会丢失。。丢失。。失。。也就是会比未转换之前少几个字节。。于是就提交不了了。。。

    其实这个做一遍之后感觉还是听简单的。跨域提交请求感觉逼格有点高 其实就那样。

    (希望这篇文章对你们有帮助)

    学之开源,用于开源;努力赚钱,与君共勉!
  • 相关阅读:
    LeetCode——打家劫舍问题
    LeetCode——无重叠区间
    LeetCode——岛屿数量
    LeetCode——石子游戏
    LeetCode——最长回文子序列
    LeetCode——高层扔鸡蛋*
    LeetCode——零钱兑换
    LeetCode刷题之BFS和DFS
    没有学历,四步加入谷歌
    坚持编程
  • 原文地址:https://www.cnblogs.com/Mr-King/p/5977420.html
Copyright © 2011-2022 走看看