fix(moysklad): add User-Agent header + enable HTTP auto-decompression
Two issues surfaced after the previous gzip-removal: 1. MoySklad's nginx edge returned 415 on some requests without a User-Agent. Send a friendly UA string (food-market/0.1 + repo URL). 2. Previous fix dropped gzip support entirely; re-enable it properly by configuring AutomaticDecompression on the typed HttpClient's primary handler via AddHttpClient.ConfigurePrimaryHttpMessageHandler. Now the response body is transparently decompressed before the JSON deserializer sees it — no more 0x1F errors. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1ef337a0f6
commit
cdf26d8719
|
|
@ -123,8 +123,12 @@
|
|||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
// MoySklad import integration
|
||||
builder.Services.AddHttpClient<foodmarket.Infrastructure.Integrations.MoySklad.MoySkladClient>();
|
||||
// MoySklad import integration. Auto-decompress gzip responses from MoySklad's edge.
|
||||
builder.Services.AddHttpClient<foodmarket.Infrastructure.Integrations.MoySklad.MoySkladClient>()
|
||||
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
|
||||
{
|
||||
AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate,
|
||||
});
|
||||
builder.Services.AddScoped<foodmarket.Infrastructure.Integrations.MoySklad.MoySkladImportService>();
|
||||
|
||||
builder.Services.AddHostedService<OpenIddictClientSeeder>();
|
||||
|
|
|
|||
|
|
@ -37,8 +37,13 @@ private HttpRequestMessage Build(HttpMethod method, string pathAndQuery, string
|
|||
// after ';'). The typed MediaTypeWithQualityHeaderValue API normalizes to
|
||||
// "application/json; charset=utf-8" which MoySklad rejects with code 1062.
|
||||
req.Headers.TryAddWithoutValidation("Accept", "application/json;charset=utf-8");
|
||||
// Don't advertise gzip — HttpClient here isn't configured with AutomaticDecompression,
|
||||
// and the JSON deserializer would choke on the gzip magic byte (0x1F).
|
||||
// MoySklad's nginx edge returns 415 for requests without a User-Agent, and we want
|
||||
// auto-decompression (Accept-Encoding is added automatically by HttpClient when
|
||||
// AutomaticDecompression is set on the primary handler — see Program.cs).
|
||||
if (!req.Headers.UserAgent.Any())
|
||||
{
|
||||
req.Headers.TryAddWithoutValidation("User-Agent", "food-market/0.1 (+https://github.com/nurdotnet/food-market)");
|
||||
}
|
||||
return req;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue