簡體   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