Маршрутизатор React использует мой URL-адрес для внутреннего API - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю SPA-приложение на стороне клиента, базовый API-интерфейс asp.net. Все отлично работает с IISExpress при отладке. Но при развертывании в IIS в качестве веб-приложения вложенный веб-сайт по умолчанию с псевдонимом «mysubdomain». Все по-прежнему работает нормально, кроме функции экспорта.

(1-й случай): откройте браузер, введите ссылку для загрузки API: http://localhost/mysubdomain/api/v1/export?filterparam. Откроется диалоговое окно сохранения. Это было мое ожидание.

(2-й случай: обычный случай): откройте мой сайт (домашнюю страницу): http://localhost/mysubdomain, затем нажмите «Экспорт», откроется новое окно по ссылке: http://localhost/mysubdomain/api/v1/export?filterparam. Я ожидал, что всплывающее окно сохранения файла сохранения будет похоже на (1-й случай), но NO . Просмотрите вернуть мои компоненты / макет визуализации.

Я не знаю, что происходит с реагирующим роутером / маршрутом? Или я что-то не так делаю? Я полагаю, что реагирующий маршрутизатор просто использует мой URL-запрос, а затем обрабатывает мой компонент, а не вызывает мой внутренний API.

Моя функция экспорта в магазине приставок:

export: (filterParams) => async (dispatch, getState) => {
      const url = `api/v1/export?${filterParams}`;
      window.open(url,'_blank');
  }

Back-end API:

[HttpGet]
[Route("download")]
public async Task<IActionResult> Download(DailyDischargeUrlQuery urlQuery)
{
  var stream = await _dailyDischargeRepository.ExportAsCsvStream(urlQuery.DischargeDate, urlQuery.MRN, urlQuery.GetCompanies(), urlQuery.GetOrders());

  return File(stream, "text/csv", "dailydischarge.csv");
}

index.js

const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');
const history = createBrowserHistory({ basename: baseUrl });
const initialState = window.initialReduxState;
const store = configureStore(history, initialState);    
const rootElement = document.getElementById('root');

ReactDOM.render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <App />
    </ConnectedRouter>
  </Provider>,
  rootElement);

registerServiceWorker();

App.js

import 'core-js';
import React from 'react';
import {Route, Router} from 'react-router';
import Layout from './components/Layout';
import Home from './components/Home';

export default () => (
    <Layout>
        <Route exact path='/' component={Home}/>
    </Layout>
);

1 Ответ

0 голосов
/ 20 ноября 2018

Проблема была решена! Это из-за сервисного работника встроенного create-реагировать-приложение.

// In production, we register a service worker to serve assets from local cache.

// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on the "N+1" visit to a page, since previously
// cached resources are updated in the background.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...