Как получить информацию JSON из основного веб-приложения ASP.NET с помощью JavaScript - PullRequest
0 голосов
/ 30 сентября 2019

Я уже некоторое время использую eBay для поиска API, он работал как положено, я реализовал его с помощью JavaScript, как показано в их документации. и недавно, из ниоткуда это перестало работать, я понятия не имею, в чем проблема ..

Я проверил тот же вызов с помощью почтальона, там все работает. Также это работает, когда я делаю один и тот же звонок в php или в C #, поэтому я подумал, что, возможно, eBay что-то сделал, и я могу получить информацию только из языка "бэкэнда": /? IDK .. Итак, я создал ссылку, которая получает информацию от eBay и выводит ее с помощью вызова 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% ОК, сам вызов http завершается неудачно, я получаю: edge debugger

(тело ответапусто)

, но если я использую ту же ссылку (без обратного вызова) (я вставляю ссылку в браузер), я получаю ожидаемую информацию: from browser

Так что мой первый подход состоял в том, чтобы как-то решить эту проблему. Но я понятия не имею, что с этим делать. Я пытался сделать вызов с использованием XMLHttpRequest и JQuery Ajax, но безуспешно.

Затем я сделал эту ссылку с помощью ядра asp.net 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);
        }

И я также не могу получить информацию по этой ссылке .. call to my link

Состояние в порядке, но тело пустое, и когда я снова открываю эту ссылку в браузере, я получаю всю информацию.. open my link in browser

Ссылка: https://backend.daviva.lt/public/Ebaycalaidaviva162?zodis=part&kiekis=12&puslapis=1 эта ссылка на данный момент неактивна и имеет 5 тыс. Запросовя могу проверить это, если хочешь ..

Я думаю, у этой проблемы может быть очень простое решение, но мне самому не хватает знаний, чтобы ее решить ..

Она делаетдля меня не имеет значения, как вы это решите. Вы можете что-то изменить в ссылке 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. Заголовки ответа: enter image description here

И я получаю ошибку CORS в консоли.

SEC7120: [CORS] Источник 'file: //' didnot find 'file: //' в заголовке ответа Access-Control-Allow-Origin для ресурса с несколькими источниками в 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'.

1 Ответ

1 голос
/ 30 сентября 2019

Извините за мой первый ответ. Причина, по которой вы получаете пустой ответ, связана с отсутствием заголовка перекрестного источника на стороне сервера. Ответ от сервера должен содержать заголовок «Access-Control-Allow-Origin». Вы можете проверить ниже, URL, который включает этот заголовок, и он будет работать с ajax.

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

...