C# HttpClient post调用对postman有效,但对C无效#
正如标题所说,我的post call在postman中有效,但在c#中无效。不管我怎么做,它在我的c代码中根本不起作用 这是我的密码:C# HttpClient post调用对postman有效,但对C无效#,c#,json,postman,httpclient,dotnet-httpclient,C#,Json,Postman,Httpclient,Dotnet Httpclient,正如标题所说,我的post call在postman中有效,但在c#中无效。不管我怎么做,它在我的c代码中根本不起作用 这是我的密码: internal async Task<(string, int)> GetJsonFileFromApiCall(string query) { var _client = new HttpClient(); var apiUrl = "https://wf19vv0nsf-dsn.algolia.
internal async Task<(string, int)> GetJsonFileFromApiCall(string query)
{
var _client = new HttpClient();
var apiUrl = "https://wf19vv0nsf-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%20(lite)%203.27.0%3Binstantsearch.js%202.10.2%3BMagento2%20integration%20(1.12.1)%3BJS%20Helper%202.26.0&x-algolia-application-id=WF19VV0NSF&x-algolia-api-key=MDdmNjA0Mjc1YzRkZjI4MWMwZmQyMDI4MDc5NDY4ZjlkYzJmOTVmMWY5Yjc3MGFkNDRiODA4YjU0MDVlM2Q1YnRhZ0ZpbHRlcnM9";
var load = new { Requests = new { IndexName = "magento2_tcg_productiondefault_products", Params = $"query={query}&hitsPerPage=12&maxValuesPerFacet=8&page=0&highlightPreTag=__ais-highlight__&highlightPostTag=__%2Fais-highlight__&ruleContexts=%5B%22magento_filters%22%2C%22%22%5D&facets=%5B%22mtg_setcode%22%2C%22is_foil%22%2C%22mtg_rarity%22%2C%22sf_colours%22%2C%22sf_types%22%2C%22sf_legalities%22%2C%22price.AUD.default%22%2C%22stock_qty%22%2C%22mtg_cmc%22%5D&numericFilters=%5B%22visibility_search%3D1%22%5D" } };
var message = await _client.PostAsync(apiUrl, GetStringContent(load));
message.EnsureSuccessStatusCode();
var jToken = JObject.Parse(await message.Content.ReadAsStringAsync());
//temp return
return ("", 1);
}
private static StringContent GetStringContent<T>(T load)
{
var serializeObject = JsonConvert.SerializeObject(load, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });
return new StringContent(serializeObject, Encoding.UTF8, "application/json");
}
内部异步任务GetJSonfileFromapCall(字符串查询)
{
var_client=new HttpClient();
var apirl=”https://wf19vv0nsf-dsn.algolia.net/1/indexes/*/查询?x-algolia-agent=algolia%20用于%20香草%20 JavaScript%20(lite)%203.27.0%3Binstantsearch.js%202.10.2%3BMagento2%20集成%20(1.12.1)%3BJS%20Helper%202.26.0&x-algolia-application-id=WF19VV0NSF&x-algolia-api-key=MDDMNJA0MJC1YZRKZZZJ4MWZMQYMDC5NDY4ZJLKYZJMOTVMMWY5YJC3MGFKNDRIODAYJUMDVLM2Q1YNRHZ0ZPBHRLCNM9”;
var load=new{Requests=new{IndexName=“magento2_tcg_productiondefault_products”,Params=$”query={query}&hitsPerPage=12&maxValuesPerFacet=8&page=0&highlightPreTag=\uUu-highlightPostTag=\uUu2Fais-highlight\uUu&ruleContexts=%5B%22magento\u过滤器%22%2C%22%5D和刻面=%5B%22mtg\u设置代码%22%2C%22%22%22%2C%22mtg\u稀有度%22%22%2C%22sf\u颜色%22%2C%22sf\u类型%22%2C%22sf%22sf%22%22%2C\u2C%22%22%22%22%22%22%2C\u2C法定库存量%22%22%22%2C%22%22%2C&numericFilters=%5B%22可见性\u搜索%3D1%22%5D“};
var message=await_client.PostAsync(apirl,GetStringContent(load));
message.EnsureSuccessStatusCode();
var jToken=JObject.Parse(wait message.Content.ReadAsStringAsync());
//温度返回
返回(“,1);
}
私有静态StringContent GetStringContent(T加载)
{
var serializeObject=JsonConvert.serializeObject(加载新的JsonSerializerSettings{ContractResolver=new CamelCasePropertyNamesContractResolver()});
返回新的StringContent(serializeObject,Encoding.UTF8,“application/json”);
}
以下是我的邮递员截图:
需要注意的一点是,post请求在进行post调用时采用表单数据。请参阅下面代码中的注释,其中也包括错误
internal async Task<(string, int)> GetJsonFileFromApiCall(string query)
{
var _client = new HttpClient();
var apiUrl = "https://wf19vv0nsf-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%20(lite)%203.27.0%3Binstantsearch.js%202.10.2%3BMagento2%20integration%20(1.12.1)%3BJS%20Helper%202.26.0&x-algolia-application-id=WF19VV0NSF&x-algolia-api-key=MDdmNjA0Mjc1YzRkZjI4MWMwZmQyMDI4MDc5NDY4ZjlkYzJmOTVmMWY5Yjc3MGFkNDRiODA4YjU0MDVlM2Q1YnRhZ0ZpbHRlcnM9";
var load = new
{
Requests = new
{
IndexName = "magento2_tcg_productiondefault_products",
Params = $"query={query}&hitsPerPage=12&maxValuesPerFacet=8&page=0&highlightPreTag=__ais-highlight__&highlightPostTag=__
%2Fais-highlight__&ruleContexts=%5B%22magento_filters%22%2C%22%22%5D&facets=%5B%22mtg_setcode%22%2C%22is_foil%22%2C%22mtg_
rarity%22%2C%22sf_colours%22%2C%22sf_types%22%2C%22sf_legalities%22%2C%22price.AUD
.default%22%2C%22stock_qty%22%2C%22mtg_cmc%22%5D&numericFilters=%5B%22visibility_search%3D1%22%5D"
}
};
//insepct this..... im sure this is probably not what you think it is.
//worth double checking
var resultS = GetStringContent(load); //inspect the result value.
var message = await _client.PostAsync(apiUrl, resultS);
message.EnsureSuccessStatusCode();
var jToken = JObject.Parse(await message.Content.ReadAsStringAsync());
//temp return
return ("", 1);
}
private static StringContent GetStringContent<T>(T load)
{
var serializeObject = JsonConvert.SerializeObject(load, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });
return new StringContent(serializeObject, Encoding.UTF8, "application/json");
}
内部异步任务GetJSonfileFromapCall(字符串查询)
{
var_client=new HttpClient();
var apirl=”https://wf19vv0nsf-dsn.algolia.net/1/indexes/*/查询?x-algolia-agent=algolia%20用于%20香草%20 JavaScript%20(lite)%203.27.0%3Binstantsearch.js%202.10.2%3BMagento2%20集成%20(1.12.1)%3BJS%20Helper%202.26.0&x-algolia-application-id=WF19VV0NSF&x-algolia-api-key=MDDMNJA0MJC1YZRKZZZJ4MWZMQYMDC5NDY4ZJLKYZJMOTVMMWY5YJC3MGFKNDRIODAYJUMDVLM2Q1YNRHZ0ZPBHRLCNM9”;
var负载=新
{
请求=新的
{
IndexName=“magento2\u tcg\u productiondefault\u products”,
Params=$“query={query}&hitsPerPage=12&maxValuesPerFacet=8&page=0&highlightPreTag=\uu\ais-highlight\uu&highlightPostTag=__
%2Fais-HIGHT_uuuu和规则上下文=%5B%22magento_u过滤器%22%2C%22%22%5D和面=%5B%22mtg_u设置代码%22%2C%22is_u箔%22%2C%22mtg_
稀有品%22%2C%22sf_颜色%22%2C%22sf_类型%22%2C%22sf_合法性%22%2C%22price.AUD
。默认值%22%2C%22库存数量%22%2C%22mtg\U cmc%22%5D和数字过滤器=%5B%22visibility\U搜索%3D1%22%5D”
}
};
//我确信这可能不是你想象的那样。
//值得仔细检查
var resultS=GetStringContent(load);//检查结果值。
var message=await\u client.PostAsync(apirl,resultS);
message.EnsureSuccessStatusCode();
var jToken=JObject.Parse(wait message.Content.ReadAsStringAsync());
//温度返回
返回(“,1);
}
私有静态StringContent GetStringContent(T加载)
{
var serializeObject=JsonConvert.serializeObject(加载新的JsonSerializerSettings{ContractResolver=new CamelCasePropertyNamesContractResolver()});
返回新的StringContent(serializeObject,Encoding.UTF8,“application/json”);
}
在邮递员请求中,您的邮件正文的requests
属性是一个数组
{
"requests": [{...}]
}
而在你的C代码中,它是一个对象
var load = new {
Requests = new { ... }
}
因此,服务器可能无法从您的请求中获取所需的数据。将请求
属性创建为列表
或对象[]
,以便将其序列化为数组
var load = new {
Requests = new List<object>{new {...}}
}
var负载=新{
请求=新列表{new{…}
}
我认为您应该更改这行代码
var load = new { Requests = new { IndexName = "magento2_tcg_productiondefault_products", Params = $"query={query}&hitsPerPage=12&maxValuesPerFacet=8&page=0&highlightPreTag=__ais-highlight__&highlightPostTag=__%2Fais-highlight__&ruleContexts=%5B%22magento_filters%22%2C%22%22%5D&facets=%5B%22mtg_setcode%22%2C%22is_foil%22%2C%22mtg_rarity%22%2C%22sf_colours%22%2C%22sf_types%22%2C%22sf_legalities%22%2C%22price.AUD.default%22%2C%22stock_qty%22%2C%22mtg_cmc%22%5D&numericFilters=%5B%22visibility_search%3D1%22%5D" } };
为此:
var load = new { Requests = new[] {new { IndexName = "magento2_tcg_productiondefault_products", Params = $"query={query}&hitsPerPage=12&maxValuesPerFacet=8&page=0&highlightPreTag=__ais-highlight__&highlightPostTag=__%2Fais-highlight__&ruleContexts=%5B%22magento_filters%22%2C%22%22%5D&facets=%5B%22mtg_setcode%22%2C%22is_foil%22%2C%22mtg_rarity%22%2C%22sf_colours%22%2C%22sf_types%22%2C%22sf_legalities%22%2C%22price.AUD.default%22%2C%22stock_qty%22%2C%22mtg_cmc%22%5D&numericFilters=%5B%22visibility_search%3D1%22%5D" }} };
httpclient
代码在哪里?而标题的设置在哪里?我已经添加了httpclient代码。我不太确定你所说的标题设置(这有点新)是什么意思。对于那些试图帮助你的人来说,“不起作用”也不是很好的描述。目前的回答是什么?你有例外吗?你得到一个空的答复?我认为这个错误是由URI的格式造成的。您可能需要使用HttpUtility.UrlEncode()
来更好地格式化您的URI。是否有错误?很抱歉,回复太晚,这很有帮助!谢谢你的解释,这很有帮助!