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

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

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

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

时间: 2024-11-05 06:25:49

ASP使用webRequest实现跨域请求的相关文章

ASP.NET MVC 实现跨域请求的两种形式

一.使用jsonp请求 1 $.ajax({ 2 type: "GET", 3 url: "http://10.174.1.1/Home/Test?callback=?", 4 data: { id: "1" }, 5 dataType: "jsonp", 6 jsonp: "callback", 7 success: function (data) { 8 alert(data); 9 }, 10 err

解决asp.net mvc的跨域请求问题

web.config中加入如下的代码 <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" />

前端跨域方案-跨域请求代理(asp.net handler)

现在技术开发偏向于使用统一的接口处理浏览器或者app的http请求. 大家都知道因为浏览器的同源策略的原因 js直接请求webapi 接口会有一些问题,即使做好服务器端的配置 同样会有不少的 问题  并且会有浏览器的兼容性 而使用jsonp 又需要服务器端对返回数据做相关处理 所以考虑考虑使用代理来解决前端跨域请求的问题. 代理程序走asp.net的一般处理程序,来实现前端js请求的接受然后转发到api站点. 关键点: 1.使用url参数的方式传送api接口的站点路径 http://test.m

基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)

概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特别各种APP万花齐放的今天,API的跨域请求是不能避免的. 在默认情况下,为了防止CSRF跨站的伪造攻击(或者是 javascript的同源策略(Same-Origin Policy)),一个网页从另外一个域获取数据时就会收到限制.有一些方法可以突破这个限制,那就是大家熟知的JSONP, 当然这只是

ASP.NET MVC 实现AJAX跨域请求方法《1》

ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据的加载,例如Google. 在ASP.Net MVC 框架里实现跨域的AJAX请求有几种方式可以实现,以下就介绍常用的两种方法. 1.     发送JSONP请求 客户端: jQuery对发送JSONP请求有很好的支持,客户端通过. ajax() 函数发送请求,其中需要制定 dataType 为"j

ASP.NET MVC 实现 AJAX 跨域请求

ASP.NET MVC 实现AJAX跨域请求的两种方法 和大家分享下Ajax 跨域的经验,之前也找了好多资料,但是都不行,后来看到个可行的修改了并测试下 果然OK了   希望对大家有所帮助! 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据的加载,例如Google. 在ASP.NET MVC 框架里实现跨域的AJAX请求有几种方式可以实现,以下就介绍常用的两种方法. 1.     发送JSONP请求

在ASP.NET 5应用程序中的跨域请求功能详解

在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏感数据,但是一些特殊情况下,你需要允许另外一个站点跨域请求你的网站. 跨域资源共享(CORS:Cross Origin Resources Sharing)是一个W3C标准,它允许服务器放宽对同域策咯的限制,使用CORS,服务器可以明确的允许一些跨域的请求,并且拒绝其它的请求.CORS要比JSONP

ASP.NET WebApi+Vue前后端分离之允许启用跨域请求

前言: 这段时间接手了一个新需求,将一个ASP.NET MVC项目改成前后端分离项目.前端使用Vue,后端则是使用ASP.NET WebApi.在搭建完成前后端框架后,进行接口测试时发现了一个前后端分离普遍存在的问题跨域(CORS)请求问题.因此就有了这篇文章如何启用ASP.NET WebApi 中的 CORS 支持. 一.解决Vue报错:OPTIONS 405 Method Not Allowed问题: 错误重现: index.umd.min.js:1 OPTIONS http://local

ASP.NET MVC 定义JsonpResult实现跨域请求

1:原理 在js中,XMLHttpRequest是不能请求不同域的数据,但是script标签却可以,所以可以用script标签实现跨域请求.具体是定义一个函数,例如jsonp1234,请求不同域的url时带上函数名,例如:http://otherdomain.com/index?callback=jsonp1234,然后服务端根据callback获取这个函数名,然后传入json字符串作为函数参数. 2:实现 http://localhost:62203/home/index页面代码如下 @{ L