今まで動いていたApp Store Connect APIへのリクエストが急にBad Requestになったときの対処法
きゅぶろぐ · 2022.11.01C#からApp Store Connect APIを叩いて売上レポートを取得する
こんな感じで定期的にAppStoreConnectから売上を取得するC#コードを走らせていたのですが、
Before.cs
var builder = new UriBuilder($"https://api.appstoreconnect.apple.com/v1/salesReports");
var query = HttpUtility.ParseQueryString(builder.Query);
query["filter[version]"] = "1_0";
query["filter[frequency]"] = "DAILY";
query["filter[reportDate]"] = $"{target.Year:0000}-{target.Month:00}-{target.Day:00}";
query["filter[reportSubType]"] = "SUMMARY";
query["filter[reportType]"] = "SALES";
query["filter[vendorNumber]"] = vendorNumber;
builder.Query = query.ToString();
var result = await client.GetAsync(builder.ToString());なぜかある日突然、400 Bad Requestが帰ってくるようになりました。
ドキュメント等を調べても特に破壊的変更が入った形跡がなく不思議だったのですが、
結論から言うと
After.cs
var builder = new UriBuilder($"https://api.appstoreconnect.apple.com/v1/salesReports");
var query = HttpUtility.ParseQueryString(builder.Query);
query[HttpUtility.UrlEncode("filter[version]")] = "1_0";
query[HttpUtility.UrlEncode("filter[frequency]")] = "DAILY";
query[HttpUtility.UrlEncode("filter[reportDate]")] = $"{target.Year:0000}-{target.Month:00}-{target.Day:00}";
query[HttpUtility.UrlEncode("filter[reportSubType]")] = "SUMMARY";
query[HttpUtility.UrlEncode("filter[reportType]")] = "SALES";
query[HttpUtility.UrlEncode("filter[vendorNumber]")] = vendorNumber;
builder.Query = query.ToString();
var result = await client.GetAsync(builder.ToString());このようにクエリパラメーターのkeyにエンコードをかけてやらないと受け付けなくなったようです。