Повторное использование одного веб-ответа в .net и rest для многих операций

#c# #rest #.net-core

Вопрос:

У меня вопрос.

У меня есть простой сервис, который выполняет запросы и передает ответ в файл, и он выглядит так:

 public async ValueTask GetWaetherByLocation(string place)
{
    try
    {
        const string locationEndpoint = "https://localhost/api/place/?query=";

        var fullEndpoint = $"{locationEndpoint}{place}";
        HttpWebRequest request = WebRequest.CreateHttp(fullEndpoint);
        WebResponse response = await request.GetResponseAsync();

        ContentDispositionHeaderValue contentDisposition;

        var fileName = ContentDispositionHeaderValue.TryParse(response.Headers["Content-Disposition"], out contentDisposition)
            ? contentDisposition.FileName
            : "place.dat";

        var filePath = Path.Combine(assemblyPathInfo, fileName);

        using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None);
        await response.GetResponseStream().CopyToAsync(stream);
    }
    catch(Exception ex)
    {
        logger.Error(ex);
    }
}
 

Мой вопрос в том, могу ли я повторно использовать stream для приведения ответа к какой-либо модели без необходимости повторной отправки запроса или передачи данных об открытии файла?

Ответ №1:

Почему бы не использовать промежуточное ПО кэширования ответов?

 public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();
    services.AddRazorPages();
}
 

По ключу запроса поможет вам:

 var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();

if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}