Javascript 在react SPA生产应用程序中设置window.location.href会产生意外结果

Javascript 在react SPA生产应用程序中设置window.location.href会产生意外结果,javascript,reactjs,iis,single-page-application,Javascript,Reactjs,Iis,Single Page Application,我有一个react 16.8.5 SPA托管在Windows Server 2016的IIS 2016后端。在应用程序中,用户可以下载CSV报告。为此,将window.location.href设置为生成报告的web API的URL。例如: window.location.href = 'api/generatereport' API返回带有文本/csv内容类型的响应。这在我们的开发和测试环境(文件已下载)中非常有效,但在生产环境中失败。在生产环境中,不是从API返回CSV内容,而是返回看起来

我有一个react 16.8.5 SPA托管在Windows Server 2016的IIS 2016后端。在应用程序中,用户可以下载CSV报告。为此,将
window.location.href
设置为生成报告的web API的URL。例如:

window.location.href = 'api/generatereport'
API返回带有
文本/csv
内容类型的响应。这在我们的开发和测试环境(文件已下载)中非常有效,但在生产环境中失败。在生产环境中,不是从API返回CSV内容,而是返回看起来像index.HTML的HTML。请注意,我检查了IIS日志,因此我知道请求从未到达如此远的距离。这似乎是客户的问题。还要注意,生产环境使用https,其他环境使用http


您有没有想过,在生产环境中,哪些因素可能会导致此请求在一个环境中路由错误?大多数情况下,我是在寻找最佳猜测或预感。

设置CSV文件的位置时,请尝试强制指定MIME类型作为URL的一部分,以便React不会假定它正在尝试在React框架内加载另一个页面

i、 e:

这将导致CSV文件作为单独的窗口打开,并强制浏览器提示将CSV流作为文件下载


注意:这种方法有很多缺点。

这是服务人员的问题。请参见

这不是客户机问题-很简单:您的生产环境配置与测试环境不一样-IIS是一个非常复杂的野兽,无法正确配置-您认为它与另一个设置相同,但您错过了一个微小的重定向或其他什么,这一切都转到了我提到的hellAs,请求从未发送到IIS。请参阅下面关于服务人员的回答。
const target: string = window.location.origin + "/api/generatereport";
window.location.href = "data:text/csv;charset=utf-8," + target;