【问题标题】:How to get JSON information from ASP.NET core web app using JavaScript如何使用 JavaScript 从 ASP.NET 核心 Web 应用程序获取 JSON 信息
【发布时间】:2020-01-29 17:47:10
【问题描述】:

我使用 eBay 查找 API 已经有一段时间了,它按预期工作,我已经用 JavaScript 实现了它,就像他们的文档中显示的那样。 最近,它突然停止工作,我不知道是什么问题..

我使用邮递员检查了同一个电话,一切正常。当我在 php 或 C# 中进行相同的调用时它也有效,所以我想也许 eBay 做了一些事情,我只能从“后端”语言获取信息:/? IDK .. 所以我创建了一个从 eBay ant 获取信息的链接,通过 get 调用输出它,当我尝试使用 Javascript 获取该数据时它也失败了,这个链接也适用于邮递员或浏览器。

有人可以向我解释这里发生了什么,我的代码有问题吗? (它之前工作了半年多没有问题......),那么它一定是eBay或IDK的东西......以及为什么我的链接不起作用,我将向您展示所有代码,以及使用浏览器调试模式的错误。

好的,所以我的 JavaScript 代码:

var urlp1 = "https://svcs.ebay.com/services/search/FindingService/v1";
    urlp1 += "?OPERATION-NAME=findItemsByKeywords";
    urlp1 += "&SERVICE-VERSION=1.0.0";
    urlp1 += "&SECURITY-APPNAME=myappname";
    urlp1 += "&GLOBAL-ID=EBAY-GB";
    urlp1 += "&RESPONSE-DATA-FORMAT=JSON";
    urlp1 += "&callback=pages1";
    urlp1 += "&REST-PAYLOAD";
    urlp1 += "&keywords=" + zodis;
    urlp1 += "&outputSelector(0)=PictureURLLarge";
    urlp1 += "&outputSelector(1)=StoreInfo";
    urlp1 += "&paginationInput.entriesPerPage=" + EPP;
    urlp1 += "&paginationInput.pageNumber=" + puslapis;
    urlp1 += "&itemFilter(0).name=Seller";
    urlp1 += "&itemFilter(0).value(0)=daviva16";
    urlp1 += "&itemFilter(0).value(1)=davivaltd";
    urlp1 += "&itemFilter(0).value(2)=davivastore";


ss=document.createElement('script'); 
ss.src= urlp1;
document.body.appendChild(ss);

回调函数 100% OK,http 调用本身失败,我得到:

(响应正文为空)

但如果我使用相同的链接(减去回调)(我将链接粘贴到浏览器中)我会得到预期的信息:

所以我的第一个方法是以某种方式解决这个问题.. 但我不知道该怎么做我尝试使用 XMLHttpRequest 和 JQuery Ajax 拨打电话都没有成功。

然后我用 asp.net core 2.1 C# 建立了这个链接

[HttpGet]
        [ProducesResponseType(StatusCodes.Status201Created)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        [Route("Public/Ebaycalaidaviva162")]        
        public ActionResult<JObject> Ebaycalaidaviva162(string zodis, string kiekis, string puslapis)
        {
            string atsakas = "";    

            using (HttpClient client = new HttpClient())
            {

                try
                {
                    //Post http callas.
                    HttpResponseMessage response = client.GetAsync("https://svcs.ebay.com/services/search/FindingService/v1?"
                         + "OPERATION-NAME=findItemsIneBayStores"
                         + "&SERVICE-VERSION=1.0.0"
                         + "&SECURITY-APPNAME=myappname"
                         + "&GLOBAL-ID=EBAY-GB"
                         + "&storeName=daviva16"
                         + "&RESPONSE-DATA-FORMAT=JSON"
                         + "&outputSelector(0)=PictureURLLarge"
                         + "&outputSelector(1)=StoreInfo"
                         + "&keywords=" + zodis
                         + "&paginationInput.entriesPerPage=" + kiekis
                         + "&paginationInput.pageNumber=" + puslapis).Result;
                    //nesekmes atveju error..
                    response.EnsureSuccessStatusCode();
                    //responsas to string
                    string responseBody = response.Content.ReadAsStringAsync().Result;                   
                    atsakas = responseBody;

                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine("\nException Caught!");
                    Console.WriteLine("Message :{0} ", e.Message);
                }

            }
            return JObject.Parse(atsakas);
        }

我也无法从此链接获取信息..

状态正常,但正文为空,当我再次在浏览器中打开此链接时,我得到了所有信息..

链接是:https://backend.daviva.lt/public/Ebaycalaidaviva162?zodis=part&kiekis=12&puslapis=1 这个链接现在已经上线了,它每天有 5k 的请求限制,所以如果你想的话,你可以测试一下..

我认为这个问题可能有非常简单的解决方案,但我自己缺乏解决它的知识..

您如何解决它对我来说并不重要您可以在 APS.NET Core 链接中更改某些内容,以便它与 JavaScript 调用或更改 JavaScript 调用或其他任何东西一起使用。所有这些对我来说都很重要,因此我可以使用以下方法获取 Json 数据javaScript..

谢谢!

瘦身

我试过这个:

$.ajax({
async: true,
type: "GET",    
dataType: "json",
url: "https://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=myappname&GLOBAL-ID=EBAY-GB&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=part&outputSelector(0)=PictureURLLarge&outputSelector(1)=StoreInfo&paginationInput.entriesPerPage=8&paginationInput.pageNumber=1&itemFilter(0).name=Seller&itemFilter(0).value(0)=daviva16&itemFilter(0).value(1)=davivaltd&itemFilter(0).value(2)=davivastore",
crossDomain: true,
success: function (atsakas) {
    alert(atsakas);
},
error: function (error) {
    alert("error  " + error);
}

我得到状态码 200,但响应正文为空,并且在 ajax 函数中触发错误。 响应头:

我在控制台中收到 CORS 错误..

SEC7120:[CORS] 源“file://”在“https://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=myappname&GLOBAL-ID=EBAY-GB&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=part&outputSelector(0)=PictureURLLarge&outputSelector(1)=StoreInfo&paginationInput.entriesPerPage=8&paginationInput.pageNumber=1&itemFilter(0).name=Seller&itemFilter(0).value(0)=daviva16&itemFilter(0).value(1)=davivaltd&itemFilter(0).value(2)=davivastore”的跨源资源的 Access-Control-Allow-Origin 响应标头中找不到“file://”。

【问题讨论】:

  • 响应状态码是 302。这意味着重定向但可能脚本标签没有跟随它
  • 那么你的意思是我应该在没有回调的情况下拨打电话,对吧?我已经尝试过使用 Ajax 和 XMLHttpRequest,我想.. 但我会再试一次以确保。并发布结果。

标签: javascript c# ajax ebay-api


【解决方案1】:

对不起,我的第一个答案。您收到空响应的原因与服务器端缺少跨源标头有关。服务器的响应必须包含“Access-Control-Allow-Origin”标头。您可以在下面的 url 测试它包含此标头,它将与 ajax 一起使用。

http://api.geonames.org/countryInfoJSON?formatted=true&lang=en&country=US&username=webucator&style=full

【讨论】:

  • 你不明白,我需要使用 JavaScript 从这个链接获取信息..
  • 好的,谢谢。将尝试在服务器端设置跨域标头并报告。
  • 好的,我的链接现在可以工作了,这是否意味着 eBay 没有为他们的 API 设置这些标头?看起来很愚蠢..非常感谢。
  • @Emilis Vadopalas 你好。是的,出于安全原因,第三方 api 不会添加此标头。你可以使用“jsonp”。如果这不起作用,您可以使用反向代理使其工作。访问下面的链接这个问题已经在 ebay 上讨论过forums.developer.ebay.com/questions/25263/…
猜你喜欢
  • 2018-05-14
  • 2017-06-17
  • 2021-06-13
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
相关资源
最近更新 更多