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.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen();
|
builder.Services.AddSwaggerGen();
|
||||||
|
|
||||||
// MoySklad import integration
|
// MoySklad import integration. Auto-decompress gzip responses from MoySklad's edge.
|
||||||
builder.Services.AddHttpClient<foodmarket.Infrastructure.Integrations.MoySklad.MoySkladClient>();
|
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.AddScoped<foodmarket.Infrastructure.Integrations.MoySklad.MoySkladImportService>();
|
||||||
|
|
||||||
builder.Services.AddHostedService<OpenIddictClientSeeder>();
|
builder.Services.AddHostedService<OpenIddictClientSeeder>();
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,13 @@ private HttpRequestMessage Build(HttpMethod method, string pathAndQuery, string
|
||||||
// after ';'). The typed MediaTypeWithQualityHeaderValue API normalizes to
|
// after ';'). The typed MediaTypeWithQualityHeaderValue API normalizes to
|
||||||
// "application/json; charset=utf-8" which MoySklad rejects with code 1062.
|
// "application/json; charset=utf-8" which MoySklad rejects with code 1062.
|
||||||
req.Headers.TryAddWithoutValidation("Accept", "application/json;charset=utf-8");
|
req.Headers.TryAddWithoutValidation("Accept", "application/json;charset=utf-8");
|
||||||
// Don't advertise gzip — HttpClient here isn't configured with AutomaticDecompression,
|
// MoySklad's nginx edge returns 415 for requests without a User-Agent, and we want
|
||||||
// and the JSON deserializer would choke on the gzip magic byte (0x1F).
|
// 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;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue