我正在創建一個代理服務器,該服務器向 PDF Blob 鏈接發出請求,然后將請求設定為我們發送給客戶端的 HttpResponse Header。這張圖應該解釋

截至目前,我已成功提出獲取 pdf 內容的請求,但我不確定如何將其發送回用戶。我關注了其他 Stackoverflow 帖子,例如這個:
我實際回傳給客戶的內容

這是我用來創建此代理端點的代碼
[AllowAnonymous]
[HttpGet("openPDF")]
public async Task<HttpResponseMessage> OpenPDF([FromQuery] string url)
{
var _httpClient = _httpClientFactory.CreateClient();
var response = await _httpClient.GetAsync(url);
var stream = await response.Content.ReadAsStreamAsync();
HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK);
message.Content = new StreamContent(stream);
message.Content.Headers.ContentLength = stream.Length;
message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return message;
}
編輯
好的,所以當我像這樣撰寫代理時,這實際上會發回 PDF
[AllowAnonymous]
[HttpGet("openPDF")]
public async Task<FileStreamResult> OpenPDF([FromQuery] string url)
{
var fileStream = new MemoryStream();
var _httpClient = _httpClientFactory.CreateClient();
var file = await _httpClient.GetStreamAsync(url).ConfigureAwait(false);
await file.CopyToAsync(fileStream);
fileStream.Position = 0;
return File(fileStream, "application/pdf", "filename.pdf");
}
問題是我想更新content-disposition到,inline所以我可以強制它在瀏覽器中打開而不是下載。所以我決定取檔案流并將其注入,httpResponseMessage.content但這仍然不起作用。它會繼續向我發送一個 json 檔案
[AllowAnonymous]
[HttpGet("openPDF")]
public async Task<HttpResponseMessage> OpenPDF([FromQuery] string url)
{
var fileStream = new MemoryStream();
var _httpClient = _httpClientFactory.CreateClient();
var file = await _httpClient.GetStreamAsync(url).ConfigureAwait(false);
await file.CopyToAsync(fileStream);
fileStream.Position = 0;
HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK);
message.Content = new StreamContent(fileStream);
message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return message;
}
老實說,我認為定義內容型別就足夠了,但猜不到
uj5u.com熱心網友回復:
這對于 .NET 6 來說非常簡單......懷疑它應該與 .NET 4x 大致相同......這使用 NuGet 包 Azure.Storage.Blobs
https://github.com/Azure/azure-sdk-for-net/blob/Azure.Storage.Blobs_12.13.1/sdk/storage/Azure.Storage.Blobs/README.md
[HttpGet("stream")]
public async Task GetBlobAsync()
{
var url = new Uri("https://path.to.blob.content/xxx");
var blobClient = new BlobClient(url);
Response.Headers.Add("Content-Type", "application/pdf");
Response.Headers.Add("Content-Disposition", @"attachment;filename=""intended file name.pdf""");
await blobClient.DownloadToAsync(Response.Body);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504735.html
標籤:C# 天蓝色 pdf dotnet-httpclient http代理
