Как выключить кэширование в минимальном API?C#

Место общения программистов C#
Ответить
Anonymous
 Как выключить кэширование в минимальном API?

Сообщение Anonymous »

Я написал минимальный API в C#, работающем на .net 8. Предполагается, что он должен вернуть одну запись и обновить таблицу в нашей базе данных, указывая на то, что запись была обработана. Характер потребляющего приложения заключается в том, что я могу отправлять только одну запись за раз. Это все работает и успешно проверяется в почте, чтобы получить первую запись, возвращенную. Когда я запускаю свои процессы базы данных отдельно, которые упоминаются в коде API, возвращаются правильные данные, что заставляет меня верить, что данные где-то кэшируются. Для «HTTP -ответных заголовков» прагма. Я не думаю, что проблема кэширования в IIS, так что, вероятно, это в моем коде C#.
Я пробовал ответный разбор и outputCache промежуточное программное обеспечение в моем коде C#, без удачи. Моей последней попыткой было использование службы addmvc с nostore , установленным в True, и местоположение, установленное в responsecachelocation.none . Это тоже не работает. Как отключить кэширование в моем API?
Вот моя программа.using TalkDeskAPI_WithReply;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
using System.Data;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorization();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddMvc(o => {
o.Filters.Add(new ResponseCacheAttribute { NoStore = true, Location = ResponseCacheLocation.None });
});

// hard coded connection string for development/testing
string ConnStr = "Data Source = xx.xx.xxx.xxx,xxxx; Initial Catalog = XXXX; TrustServerCertificate = True; User ID = XXXXXXX; Password = XXXXXXXX";

var app = builder.Build();

app.UseAuthorization();

// Middleware to validate apiKey - works and not relevant here
app.UseAPIKeyMiddleware();

app.UseResponseCaching();

using (SqlConnection connection = new SqlConnection(ConnStr))
{
SqlCommand command = new SqlCommand("dbo.Get_Data_For_API_Test_Data_3", connection);
command.CommandType = CommandType.StoredProcedure;

command.Connection.Open();
command.ExecuteNonQuery();

List result = new List();

using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Contact c = new Contact();
c.c_Id = (Int64)reader["c_Id"];
c.member_PhoneNumber = (string)reader["member_PhoneNumber"];
c.member_FirstName = (string)reader["member_FirstName"];
c.member_LastName = (string)reader["member_LastName"];
c.member_ID = (string)reader["member_ID"];
c.Message = (string)reader["message"];
result.Add(c);
}
}

command.Connection.Close();
command.Connection.Dispose();

// Get Contact Item
app.MapGet("/api/Contact", async () => result).CacheOutput (o =>
{
o.Expire(TimeSpan.FromMilliseconds(1));
o.NoCache();
});

app.Run();
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... inimal-api
Ответить

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

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

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

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

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