asp.net-mvc-3 – ASP.NET MVC 3 JSONP:这适用于JsonValueProvi
Phil Haack在如何使用
JSON,数据绑定和数据验证方面拥有出色的
blog post.
输入浏览器的“同源策略安全限制”.和JSONP,您使用$.getJSON()来检索内容. 有没有内置的MVC 3方法来做到这一点,还是我需要遵循posts like this的建议?你可以发布内容吗?我问,因为我的同事实现了JsonPfilterAttribute以及其他工作.如果MVC 3中已存在某些内容,显然最好避免使用它. 编辑: 总结:除了访问POST变量之外,一切都有效,即如何在上下文中访问POST变量? (注释在代码的最后部分标记) 我选择使用这种格式来调用服务器: $.ajax({ type: "GET",url: "GetMyDataJSONP",data: {},contentType: "application/json; charset=utf-8",dataType: "jsonp",jsonpCallback: "randomFunctionName" }); 产生这种反应: randomFunctionName([{"firstField":"111","secondField":"222"}]); 如果我使用GET,这一切都很有效.但是,我仍然无法将其作为POST工作.这是Nathan Bridgewater here发布的原始代码.此行未找到POST数据: context.HttpContext.Request["callback"]; 要么我应该以某种方式访问??Form,要么MVC数据验证器正在剥离POST变量. context.HttpContext.Request应该如何[“callback”];写入是为了访问POST变量还是由于某些原因MVC剥离这些值? namespace System.Web.Mvc { public class JsonpResult : ActionResult { public JsonpResult() {} public Encoding ContentEncoding { get; set; } public string ContentType { get; set; } public object Data { get; set; } public string JsonCallback { get; set; } public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); this.JsonCallback = context.HttpContext.Request["jsoncallback"]; // This is the line I need to alter to find the form variable: if (string.IsNullOrEmpty(this.JsonCallback)) this.JsonCallback = context.HttpContext.Request["callback"]; if (string.IsNullOrEmpty(this.JsonCallback)) throw new ArgumentNullException( "JsonCallback required for JSONP response."); HttpResponseBase response = context.HttpContext.Response; if (!String.IsNullOrEmpty(ContentType)) response.ContentType = ContentType; else response.ContentType = "application/json; charset=utf-8"; if (ContentEncoding != null) response.ContentEncoding = ContentEncoding; if (Data != null) { JavaScriptSerializer serializer = new JavaScriptSerializer(); response.Write(string.Format("{0}({1});",this.JsonCallback,serializer.Serialize(Data))); } } } //extension methods for the controller to allow jsonp. public static class ContollerExtensions { public static JsonpResult Jsonp(this Controller controller,object data) { JsonpResult result = new JsonpResult(); result.Data = data; result.ExecuteResult(controller.ControllerContext); return result; } } } 解决方法
就接收JSON字符串并将其绑定到模型而言,JsonValueProviderFactory在ASP.NET MVC 3中开箱即用.但是没有任何内置输出JSONP.你可以写一个自定义的JsonpResult:
public class JsonpResult : JsonResult { public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } var request = context.HttpContext.Request; var response = context.HttpContext.Response; string jsoncallback = (context.RouteData.Values["jsoncallback"] as string) ?? request["jsoncallback"]; if (!string.IsNullOrEmpty(jsoncallback)) { if (string.IsNullOrEmpty(base.ContentType)) { base.ContentType = "application/x-javascript"; } response.Write(string.Format("{0}(",jsoncallback)); } base.ExecuteResult(context); if (!string.IsNullOrEmpty(jsoncallback)) { response.Write(")"); } } } 然后在你的控制器动作中: public ActionResult Foo() { return new JsonpResult { Data = new { Prop1 = "value1",Prop2 = "value2" },JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } 可以使用 $.getJSON('http://domain.com/home/foo?jsoncallback=?',function(data) { alert(data.Prop1); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 当使用AngularJS,WebAPI 2和Oauth 2时,如何将授
- .NET高级调试系列-Windbg调试入门篇
- asp.net – Cookiless Session是安全隐患吗?
- 在ASP.NET中如何知道当前路径是否是安全路径
- asp.net-mvc – ASP.NET中的Response.Write是一个坏主意吗?
- asp.net-mvc – 如何将索引应用于IEnumerable表达式类型并在
- asp.net-mvc – MVC会话过期而不是身份验证
- asp.net-mvc – SQL Azure得到一个错误’已经有一个打开的D
- asp.net-mvc – Microsoft MVC 4,APIController和适当的RES
- asp.net-mvc – MVC 4捕获所有路由从未到达
- asp.net-mvc – 使用IIS 7中的ASP.NET MVC 1来路
- Asp.net MVC 集成AD域认证
- asp.net – 错误HTTP 404.11通过查询字符串传递帐
- ASP.NET浏览器显示“网页已过期”的后退按钮(回发
- IIS / .NET上的Blackberry推送服务启动器
- asp.net – 在同一个项目的MVC和Web API中使用In
- ASP.Net Webforms和ASP.Net MVC是基于组件还是基
- asp.net-mvc – NuGet项目>添加库包参考未出现
- asp.net-web-api – Web API 2是否可以通过编程方
- asp.net – HttpContext.Current如何工作?