Уточнить клиент возвращает кэшированные ответы, несмотря на то, что заголовки без кешей и httpmessagehandlerC#

Место общения программистов C#
Ответить
Anonymous
 Уточнить клиент возвращает кэшированные ответы, несмотря на то, что заголовки без кешей и httpmessagehandler

Сообщение Anonymous »

Я испытываю проблему с кэшированием с ремонтом при вызове конечных точек API admin api KeyCloak. Несмотря на установку различных заголовков без кеша и реализацию пользовательских httpmessagehandler , я все еще получаю кэшированные ответы из предыдущих запросов. Однако: < /p>

Прямые вызовы httpclient работают правильно (без кэширования) < /li>
Запросы почтальона работают правильно < /li>
перезапуск приложения и вызов realmsall () < /code> Возвращает правильный ответ < /li>
< /ul>
. В РЕКИТ, а не на стороне сервера.
Такая же проблема возникает в методе Clientsall3 () .

Код: Выделить всё

[Headers("Accept: application/json")]
[Get("/admin/realms")]
Task RealmsAll([Query] bool? briefRepresentation);
Регистрация услуг

Код: Выделить всё

services.AddTransient();
var refitSettings = new RefitSettings
{
ContentSerializer = new SystemTextJsonContentSerializer(new JsonSerializerOptions
{
PropertyNameCaseInsensitive = false,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
})
};

services.AddRefitClient(refitSettings)
.AddHttpMessageHandler()
.AddHttpMessageHandler()
.ConfigureHttpClient((serviceProvider, config) =>
{
var keycloakOptions = serviceProvider.GetRequiredService();
config.BaseAddress = new Uri(keycloakOptions.Value.Url);

config.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue
{
NoCache = true,
NoStore = true,
MustRevalidate = true,
MaxAge = TimeSpan.Zero
};
config.DefaultRequestHeaders.Pragma.ParseAdd("no-cache");
});
custom nocachehandler:
public class NoCacheHandler : DelegatingHandler
{
protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// Add no-cache headers
request.Headers.Add("Cache-Control", "no-cache, no-store, must-revalidate");
request.Headers.Add("Pragma", "no-cache");

// Add unique timestamp to URL
var uriBuilder = new UriBuilder(request.RequestUri);
var query = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query);
query["_t"] = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
uriBuilder.Query = query.ToString();
request.RequestUri = uriBuilder.Uri;

var response = await base.SendAsync(request, cancellationToken);

// Clear response cache headers
response.Headers.Remove("ETag");
response.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue
{
NoCache = true,
NoStore = true,
MustRevalidate = true
};

return response;
}
}
< /code>
что я попробовал < /strong>

Добавлено контроль кэша: без кэша, без магазина, необходимо-ревалидатные заголовки
Добавлены Pragma: no-cache Заголовки
Добавлены уникальные временные параметры для каждого запроса
emerced atagers

conifulant http-http-htt /> Используется пользовательский httpmessagehandler для изменения запросов /ответов
set connectionClose = false и другие конфигурации httpclient < /p>
Я попытался отключить кэширование на стороне клиента при ремонте. Также попробовал httpclient. Refit не сработал, как и ожидалось, но httpclient сделал.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... pmessageha
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»