Возврат pdf из прокси. net веб-вызов API, интерфейс Angular не получает данные pdf - PullRequest
0 голосов
/ 28 апреля 2020

Я просмотрел несколько сообщений из стека о том, как вернуть 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, чтобы направлять мои исследования.

...