C# HttpClient post调用对postman有效,但对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.

正如标题所说,我的post call在postman中有效,但在c#中无效。不管我怎么做,它在我的c代码中根本不起作用

这是我的密码:

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。是否有错误?很抱歉,回复太晚,这很有帮助!谢谢你的解释,这很有帮助!