Я просмотрел несколько сообщений из стека о том, как вернуть pdf как из MVC контроллера, так и из вызова Web API, но я не могу заставить эти решения работать с тем, с чем я работаю.
Внешний интерфейс написан на Angular (8, я полагаю). Как настроена безопасность нашего приложения, высшие должностные лица решили, что необходим прокси-вызов из запроса Angular для PDF в API, который возвращает PDF.
Предполагается, что прокси простой пропуск в целях безопасности, а остальные вызовы работают отлично, но PDF вообще не работает.
angular ожидает буфер массива, и когда мы разрешаем Angular обращаться к API напрямую, без прохождения через прокси-сервер (не работает), рендеринг PDF выполняется без проблем.
Хорошо, предыстория завершена. API генерации PDF возвращает октетный поток, но прокси продолжает возвращать JSON, а Angular не может прочитать это.
Первоначально, как и во всех других вызовах, я просто пытался вернуть вызов на фронт
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue( "application/octet-stream" ) );
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( _webApiKey );
HttpResponseMessage response = null;
var url = Request.RequestUri.ParseQueryString();
var encodedUrl = url.Get( "encodedUrl" );
var decodedUrl = encodedUrl.Replace( @"%2F", @"/" );
decodedUrl += $"?isFillable={_isFillable}&stateAbbr={_stateAbbr}&lang={_lang}";
response = await httpClient.GetAsync( decodedUrl );
if ( !response.IsSuccessStatusCode )
{
return StatusCode( response.StatusCode );
}
return Ok( response );
Но для этого вызова это не работает. Я также попытался перестроить ответ, скопировав содержимое следующим образом:
var stream = new MemoryStream();
var contents = await response.Content.ReadAsStreamAsync();
contents.CopyTo( stream );
return Ok( new System.Web.Mvc.FileStreamResult( stream, "application/pdf" ) );
Я дошел до ума и не знаю, откуда go отсюда. Будем весьма благодарны за любую помощь, указатели или новую поисковую фразу в Google, чтобы направлять мои исследования.