【问题标题】:How do I return jsonp from web.api site in IIS 8.5?如何从 IIS 8.5 中的 web.api 站点返回 jsonp?
【发布时间】:2016-04-20 06:59:50
【问题描述】:

我在 Visual Studio 2013 中创建了一个 web.api 解决方案。预计跨域问题我安装了 WebApiContrib.Formatting.Jsonp Nuget 包。我在从 jquery 调用 web.api 服务的解决方案中创建了一个 Web 应用程序。通常我的 ajax 请求如下所示:

var request = $.ajax({
    url: uri + '/api/events/',
    type: 'GET',
    dataType: 'jsonp',
    crossDomain: true
});

我最初在 Windows 7 中启动该项目,最近升级到 Windows 10。这一切在 VS 2013/IIS Express 中本地运行良好 - web.api 将事件的 json 数组返回到调用脚本。我还将 web.api 项目发布到在 IIS 10 下运行的本地网站,那里一切都很好。

所以我将 web.api 部署到开发服务器 - 运行 IIS 8.5 的 Windows Server 2012 R2。当我请求 http://devservername/api/events/ 时出现错误:请求 URI 中未提供回调参数

Error Image - A callback parameter was not provided in the request URI

开发服务器运行asp.net 4.5。我担心我无法在本地处理回调参数,但此技术在目标服务器上失败。或者更糟的是,这是一个部署/配置问题。谁能在这里推荐一个最好的方法?

谢谢。

【问题讨论】:

  • 您是否检查了控制台以确认请求 URI 中包含回调参数?
  • 我没有尝试直接从 Internet Explorer 调用 web.api 方法时发生错误。在请求中附加 ?callback=something 确实提供了一些有用的反馈。

标签: jquery ajax asp.net-web-api jsonp


【解决方案1】:

我做了更多的挖掘工作,并在 web.api 项目中添加了一些错误记录和跟踪。事实证明,显示的错误是正确的 - 当尝试从 Internet Explorer 访问 web.api 方法时,除非提供回调参数,否则将发生此错误(应该如此)。 Chrome 和 Firefox 会愉快地显示数据源的 XML 版本。在 IE 中,如果附加 ?callback=something 那么 IE 将尝试返回数据。 jQuery 通过在 AJAX 请求中自动附加回调参数来隐藏所有这些。

如果尝试从 C# 服务器端调用 web.api 方法,则需要在调用中附加此参数:

        using (WebClient wc = new WebClient())
        {

            //   wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
            wc.Headers.Add("Accept", "application/jsonp");
            NameValueCollection nvc = new NameValueCollection();
            nvc.Add("callback", "jsonCallback");
            wc.QueryString = nvc;

            try
            {
                string result = wc.DownloadString(MyWebApiUrl);
                var json = System.Text.RegularExpressions.Regex.Match(result, @".+\((.+)\).+").Groups[1].Value;
                events = JsonConvert.DeserializeObject<Event[]>(json);
            }

            catch (Exception)
            {
                events = new Event[] { };
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2015-04-28
    • 2018-05-15
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多