您的位置:首页 > 编程语言 > ASP

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

2015-06-02 13:51 731 查看
一、使用jsonp请求

$.ajax({
type: "GET",
url: "http://10.174.1.1/Home/Test?callback=?",
data: { id: "1" },
dataType: "jsonp",
jsonp: "callback",
success: function (data) {
alert(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});


//Jsonp跨域访问
[HttpGet]
public ActionResult Test()
{
string vid = Request.QueryString["id"];
string callback = Request["callback"];
return new JsonpResult<object>(Member.FirstOrDefault(u => u.id == id).Name, callback);
}

public class JsonpResult<T> : ActionResult
{
public T Obj { get; set; }
public string CallbackName { get; set; }

public JsonpResult(T obj, string callback)
{
this.Obj = obj;
this.CallbackName = callback;
}

public override void ExecuteResult(ControllerContext context)
{
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";

context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.Write(jsonp);
}
}


二、跨域资源共享

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

$.ajax({
type: "GET",
url: "http://10.174.1.1/Home/Test2",
data: { id: "1" },
dataType: "json",
success: function (data) {
alert(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});


//跨站资源共享实现跨站AJAX请求
public ActionResult Test2()
{
string vid = Request.QueryString["id"];
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
return Json(Member.FirstOrDefault(u => u.id == id).Name, JsonRequestBehavior.AllowGet);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: