你的位置:首页 > ASP.net教程

[ASP.net教程]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之后问题就来了,我这边的数据就传输不过去了。。当时就跪在这里了。到网上找了半天 也没找到自己想要的答案。然后我就尝试的注释的那三行转化格式的代码(就上面那个方法注释的).

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

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

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