#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" };
}