支持 JSONP 的 ASP.NET 通用 HTTP 处理程序 (.ashx)

Posted

技术标签:

【中文标题】支持 JSONP 的 ASP.NET 通用 HTTP 处理程序 (.ashx)【英文标题】:ASP.NET Generic HTTP Handler (.ashx) supporting JSONP 【发布时间】:2011-04-11 19:18:19 【问题描述】:

谁能展示一个返回 JSON 并支持跨域调用的 HTTP 处理程序的示例。我正在使用 jQuery 的 getJSON() 向我的 Web 服务器上的 .ashx 文件发送请求。

我知道我需要添加 ?callback=?到我的 getJSON() url 中的 url,但我不确定在我的 ashx 文件中的服务器上需要做什么?

【问题讨论】:

ASP.NET - Passing JSON from jQuery to ASHX的可能重复 @Chris Lively - 不要这么认为。 【参考方案1】:

想通了。我将此函数添加到我的处理程序并调用它:

void WriteCallback(HttpContext context, string json)
        
            context.Response.Write(string.Format("0(1);", context.Request["callback"], json));
        

然后在浏览器中:

$(function () 
    $.getJSON('MyHandler.ashx?callback=?',  Foo: "Bar" , function (data) 

        if (data.SomeCondition)
            $('#someElement').show();

    );
);

【讨论】:

+1 对于第一个函数 - 今天在执行此操作时为我节省了一些时间。 谢谢!我整天都在用头撞墙,没有意识到在进行 JSONP 调用时必须用回调函数名称包装 JSON 输出。【参考方案2】:

“跨域”可能成为问题的唯一方法是,如果您使用某种状态机制(即:cookie)作为调用的一部分。你不应该这样做。

否则,请参阅此链接:ASP.NET - Passing JSON from jQuery to ASHX 了解信息。有一些很好的代码示例可以告诉你该怎么做。

【讨论】:

抱歉,这根本没有帮助。

以上是关于支持 JSONP 的 ASP.NET 通用 HTTP 处理程序 (.ashx)的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 JQuery 访问 ASP.net Web 服务时出错 - JSONP

如何使用 JSONP 将复杂数组发送到 asp.net mvc 控制器

ASP.NET中JSONP的两种实现以及其他跨域解决方案的简单实现

收到错误“JSONP 注入脚本未调用回调。”使用 Angular 2 和服务器 ASP.NET 核心

如何从 ASP.NET Web 服务生成 JSONP 以进行跨域调用?