如何使用 JavaScript 从 ASP.NET 核心网络应用获取 JSON 信息
How to get JSON information from ASP.NET core web app using JavaScript
我一直在使用 eBay 发现 API 一段时间,它按预期工作,我已经用 JavaScript 实现了它,就像他们的文档中所示。
最近,它突然停止工作,我不知道是什么问题..
我用邮递员检查了同一个电话,那里一切正常。当我在 php 或 C# 中进行相同的调用时它也有效,所以我想也许 eBay 做了一些事情,我只能从 "backend" 语言获取信息:/? IDK .. 所以我创建了一个 link 从 eBay ant 获取信息并通过 get 调用输出它,当我尝试使用 Javascript 获取该数据时它也失败了,这个 link 也在邮递员或浏览器中工作。
有人可以向我解释这里发生了什么,我的代码有问题吗? (它以前工作了半年多没有问题..),那么它一定是 eBay 或 IDK 的东西.. 还有为什么我的 link dosnt 工作,我会告诉你所有的代码,以及使用的错误浏览器调试模式。
好的 所以我的 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 调用本身失败,我得到:
(响应 body 为空)
但如果我使用相同的 link(减去回调)(我将 link 粘贴到浏览器中),我会得到预期的信息:
所以我的第一个方法是以某种方式解决这个问题..
但是我不知道该怎么办我已经尝试使用 XMLHttpRequest 和 JQuery Ajax 进行调用,但都没有成功..
然后我用asp.net core 2.1 C#
做了这个link
[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);
}
我也无法从这个 link 中获取信息..
状态正常,但是 body 是空的,当我再次在浏览器中打开这个 link 时,我得到了所有信息..
Link 是:https://backend.daviva.lt/public/Ebaycalaidaviva162?zodis=part&kiekis=12&puslapis=1
这个 link 目前已经上线,每天有 5k 的请求限制,所以如果你想的话你可以测试一下..
我认为这个问题可能有很简单的解决方案,但我自己缺乏解决它的知识..
对我来说,你如何解决它并不重要你可以在APS.NET核心link中改变一些东西,这样它就可以与JavaScript调用一起工作,或者改变JavaScript调用,或其他.. 所有对我来说都很重要的东西,所以我可以用 javaScript..
获得 Json 数据
谢谢!
瘦身
我试过这个:
$.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,但响应 body 为空,它在 ajax 函数中触发错误。
响应 headers:
我在控制台中收到 CORS 错误..
SEC7120: [CORS] The origin 'file://' did not find 'file://' in the Access-Control-Allow-Origin response header for cross-origin resource at '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'.
抱歉我的第一个回答。您收到空响应的原因与服务器端缺少交叉源 header 有关。服务器的响应必须包含 "Access-Control-Allow-Origin" header。您可以在下面测试 url 它包括这个 header 并且它可以与 ajax.
一起使用
我一直在使用 eBay 发现 API 一段时间,它按预期工作,我已经用 JavaScript 实现了它,就像他们的文档中所示。 最近,它突然停止工作,我不知道是什么问题..
我用邮递员检查了同一个电话,那里一切正常。当我在 php 或 C# 中进行相同的调用时它也有效,所以我想也许 eBay 做了一些事情,我只能从 "backend" 语言获取信息:/? IDK .. 所以我创建了一个 link 从 eBay ant 获取信息并通过 get 调用输出它,当我尝试使用 Javascript 获取该数据时它也失败了,这个 link 也在邮递员或浏览器中工作。
有人可以向我解释这里发生了什么,我的代码有问题吗? (它以前工作了半年多没有问题..),那么它一定是 eBay 或 IDK 的东西.. 还有为什么我的 link dosnt 工作,我会告诉你所有的代码,以及使用的错误浏览器调试模式。
好的 所以我的 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 调用本身失败,我得到:
(响应 body 为空)
但如果我使用相同的 link(减去回调)(我将 link 粘贴到浏览器中),我会得到预期的信息:
所以我的第一个方法是以某种方式解决这个问题.. 但是我不知道该怎么办我已经尝试使用 XMLHttpRequest 和 JQuery Ajax 进行调用,但都没有成功..
然后我用asp.net core 2.1 C#
做了这个link[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);
}
我也无法从这个 link 中获取信息..
状态正常,但是 body 是空的,当我再次在浏览器中打开这个 link 时,我得到了所有信息..
Link 是:https://backend.daviva.lt/public/Ebaycalaidaviva162?zodis=part&kiekis=12&puslapis=1 这个 link 目前已经上线,每天有 5k 的请求限制,所以如果你想的话你可以测试一下..
我认为这个问题可能有很简单的解决方案,但我自己缺乏解决它的知识..
对我来说,你如何解决它并不重要你可以在APS.NET核心link中改变一些东西,这样它就可以与JavaScript调用一起工作,或者改变JavaScript调用,或其他.. 所有对我来说都很重要的东西,所以我可以用 javaScript..
获得 Json 数据谢谢!
瘦身
我试过这个:
$.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,但响应 body 为空,它在 ajax 函数中触发错误。
响应 headers:
我在控制台中收到 CORS 错误..
SEC7120: [CORS] The origin 'file://' did not find 'file://' in the Access-Control-Allow-Origin response header for cross-origin resource at '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'.
抱歉我的第一个回答。您收到空响应的原因与服务器端缺少交叉源 header 有关。服务器的响应必须包含 "Access-Control-Allow-Origin" header。您可以在下面测试 url 它包括这个 header 并且它可以与 ajax.
一起使用