繁体   English   中英

如何从 ASP.NET 核心 web 应用程序中获取 JSON 信息

[英]How to get JSON information from ASP.NET core web app using JavaScript

我一直在使用 eBay 寻找 API 一段时间,它按预期工作,我已经用 JavaScript 实现了它,如他们的文档中所示。 最近,它突然停止工作,我不知道是什么问题..

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

有人可以向我解释这里发生了什么,我的代码有问题吗? (它之前工作了半年多没有问题......),那么它一定是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);

回调 function 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 的请求限制,所以如果你愿意,你可以测试一下。 .

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

It does not matter to me how you solve it You can change something in APS.NET Core link so it works with JavaScript call or change JavaScript call, or whatever.. All that matters to me so I can get Json data with 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 function 中触发错误。 响应标头: 在此处输入图像描述

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

SEC7120:[CORS] 在“ 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。 entryPerPage=8&paginationInput.pageNumber=1&itemFilter(0).name=Seller&itemFilter(0).value(0)=daviva16&itemFilter(0).value(1)=davivaltd&itemFilter(0).value(2)=davivastore '。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM