Я создаю 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>
);