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             error: function (XMLHttpRequest, textStatus, errorThrown) {
11                 alert(errorThrown);
12             }
13         });
 1  //Jsonp跨域访问
 2         [HttpGet]
 3         public ActionResult Test()
 4         {
 5             string vid = Request.QueryString["id"];
 6             string callback = Request["callback"];
 7             return new JsonpResult<object>(Member.FirstOrDefault(u => u.id == id).Name, callback);
 8         }
 9
10
11         public class JsonpResult<T> : ActionResult
12         {
13             public T Obj { get; set; }
14             public string CallbackName { get; set; }
15
16             public JsonpResult(T obj, string callback)
17             {
18                 this.Obj = obj;
19                 this.CallbackName = callback;
20             }
21
22             public override void ExecuteResult(ControllerContext context)
23             {
24                 var js = new System.Web.Script.Serialization.JavaScriptSerializer();
25                 var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";
26
27                 context.HttpContext.Response.ContentType = "application/json";
28                 context.HttpContext.Response.Write(jsonp);
29             }
30         }

二、跨域资源共享

相比 JSONP 请求,跨域资源共享要简单许多,也是实现跨域 AJAX 请求的首选。不过在 IE9 还没有对该技术的支持,FireFox 就已经支持了

 1         $.ajax({
 2             type: "GET",
 3             url: "http://10.174.1.1/Home/Test2",
 4             data: { id: "1" },
 5             dataType: "json",
 6             success: function (data) {
 7                 alert(data);
 8             },
 9             error: function (XMLHttpRequest, textStatus, errorThrown) {
10                 alert(errorThrown);
11             }
12         });
1         //跨站资源共享实现跨站AJAX请求
2         public ActionResult Test2()
3         {
4             string vid = Request.QueryString["id"];
5             HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
6             return Json(Member.FirstOrDefault(u => u.id == id).Name, JsonRequestBehavior.AllowGet);7
8         }
时间: 2024-11-05 12:31:06

ASP.NET MVC 实现跨域请求的两种形式的相关文章

ASP.NET MVC 实现AJAX跨域请求的两种方法

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

跨域请求的两种实现方式

Jsonp 域1 index.html <script> $(".get-service").click(function () { $.ajax({ url: "http://127.0.0.1:8005/service/", type: "get", dataType: "jsonp", jsonp: "callbacks", // 伪造ajax, 基于script // jsonpCall

关于跨域请求的两种方案

cors方式 之前在chrome控制台看到金蝉同一个请求有的时候会发送两个(多出一个OPTION的情况)的情况,有点奇怪,经过一顿研究发现原来这个是 CORS 实现跨域 非简单请求 的处理方式.具体内容参见阮大神的文档跨域资源共享 CORS 详解. jsonp方式 原理 利用<script>标签src不受同源策略限制. 缺点 <script>请求的内容会直接执行,那么这就要求接口返回的东西是浏览器可执行的,目前的实现方式都是把结果包装成callback(reslut)这种模式,但是

解决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" />

jQuery中Ajax+Spring MVC实现跨域请求

项目开发中,某个可独立.也可集成的子业务模块须要向外开放相关API接口,先说下项目本身使用了jersery来实现RESTful webservice以名词形式公布API.有意思的是在实际的操作中同事却通过Ajax跨域请求的方式去调用该API,先不说成功与否,这样的方式本就是"滑稽"的.和他一起探讨了此种做法的不合理性,之后选择jersey client的方式进行远程调用.只是他在跨域请求中遇到了问题,自己闲暇时间予以解决,这才是此篇文章的由来. jQuery对跨域请求有两种解决方式各自

解决vue axios跨域请求发送两次问题

问题: vue axios跨域请求,在Request Headers加Authorization传递Token时,发现统一请求触发了两次,第一次是Request Method: OPTIONS请求. 原因: 跨域请求时,浏览器会首先使用OPTIONS方法发起一个预请求,判断接口是否能够正常通讯.如果通讯异常,则不会发送真正的请求,如果测试通讯正常,则开始真正的请求. 解决方法: 后台:判断请求方式是OPTIONS,则不处理: 预请求 发送真正请求  PHP解决方法 class Common ex

System.Web.Http.Cors配置跨域访问的两种方式

System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心得.在webapi中使用System.Web.Http.Cors配置跨域信息可以有两种方式.  一种是在App_Start.WebApiConfig.cs的Register中配置如下代码,这种方式将在所有的webapi Controller里面起作用. using System; using Sys

Ajax+Spring MVC实现跨域请求(JSONP)JSONP 跨域

JSONP原理及实现 接下来,来实际模拟一个跨域请求的解决方案.后端为Spring MVC架构的,前端则通过Ajax进行跨域访问. 1.首先客户端需要注册一个callback(服务端通过该callback(jsonp)可以得到js函数名(jsonpCallback)),然后以JavaScript语 法的方式,生成一个function 2.接下来,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段js语法文档,返回给客户端. 3.最后客户端浏览器动态的解析script标签,

Ajax+Spring MVC实现跨域请求(JSONP)

JSONP解释 在解释JSONP之前,我们需要了解下"同源策略"这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载额文档的属性.有点绕,说的简单点就是浏览器限制脚本只能和同协议.同域名.同端口的脚本进行交互. JSONP就是为了解决这一问题的,JSONP是英文JSON with Padding的缩写,是一个非官方的协议.他允许服务端生成script tags返回值客户端,通过javascript call