我正在寻找跨域返回一些JSON的方式,并且我知道这样做的方法是通过JSONP而非纯JSON。我使用的是ASP.net MVC,因此我在考虑只扩展JSONResult类型,然后扩展ig Controller,以便它也实现了Jsonp方法。这是最好的解决方法,还是有内置的ActionResult可能更好?编辑:我继续这样做。仅供参考,我添加了一个新结果:public class JsonpResult : System.Web.Mvc.JsonResult { public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } HttpResponseBase response = context.HttpContext.Response; if (!String.IsNullOrEmpty(ContentType)) { response.ContentType = ContentType; } else { response.ContentType = "application/javascript"; } if (ContentEncoding != null) { response.ContentEncoding = ContentEncoding; } if (Data != null) { // The JavaScriptSerializer type was marked as obsolete prior to .NET Framework 3.5 SP1#pragma warning disable 0618 HttpRequestBase request = context.HttpContext.Request; JavaScriptSerializer serializer = new JavaScriptSerializer(); response.Write(request.Params["jsoncallback"] + "(" + serializer.Serialize(Data) + ")");#pragma warning restore 0618 } } }还有我所有控制器的超类的几种方法:protected internal JsonpResult Jsonp(object data) { return Jsonp(data, null /* contentType */); } protected internal JsonpResult Jsonp(object data, string contentType) { return Jsonp(data, contentType, null); } protected internal virtual JsonpResult Jsonp(object data, string contentType, Encoding contentEncoding) { return new JsonpResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding }; }奇迹般有效。
3 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
我没有使用Jsonp()方法对控制器进行子类化,而是采用了扩展方法路线,因为它对我来说感觉更干净。关于JsonpResult的好处是,您可以像测试JsonResult一样完全测试它。
我做了:
public static class JsonResultExtensions
{
public static JsonpResult ToJsonp(this JsonResult json)
{
return new JsonpResult { ContentEncoding = json.ContentEncoding, ContentType = json.ContentType, Data = json.Data, JsonRequestBehavior = json.JsonRequestBehavior};
}
}
这样,您不必担心创建所有不同的Jsonp()重载,只需将您的JsonResult转换为一个Jsonp。
- 3 回答
- 0 关注
- 619 浏览
添加回答
举报
0/150
提交
取消