.net - React SPA 在刷新时找不到页面 - 从导航栏中选择时加载正常
问题描述
我有一个应用程序,我在前端使用 React/Redux 编写,后端使用 .NET Core 2.2。这是您典型的 SPA 应用程序,我相信我很久以前就开始使用 CreateReactApp 了。我之前已经设置了路由正常工作的页面,当我在键盘上按 F5 或输入应该导航到页面的 URL 时,一切都会按预期加载。您将在下面的示例中看到这一点,AuditLog 和 AddLicenses 页面在刷新或我手动输入 URL 时都正确加载(开发 URL 为 )。
我正在我的应用程序上开发一个名为 Copy 的新功能,并且这个新功能应该有自己的 URL 可解析为 ( http://localhost:8080/Copy )。但是,由于某种原因,当我按 F5 并收到 405 错误时,URL 不会实际加载页面。如果我手动将 URL 复制并粘贴到新选项卡中,情况也是如此。但是,如果我从导航栏中选择它,它会加载得很好。这是我在导航栏中选择它时的页面(我删除了一些信息,因为我不确定我可以共享多少应用程序): FromNavbar
这是我从导航栏导航到该页面后按 F5 时收到的错误: On F5
这是我的导航菜单的样子:
import * as React from 'react';
import { Glyphicon, Nav, Navbar, NavItem } from 'react-bootstrap';
import { Container } from 'react-bootstrap/lib/Tab';
import { LinkContainer } from 'react-router-bootstrap';
import { Link } from 'react-router-dom';
import './NavMenu.css';
export default (props: any) => (
<Container>
<Navbar inverse={true} fixedTop={true} fluid={true} collapseOnSelect={true}>
<Navbar.Header>
<Navbar.Brand>
<Link to={'/'}>App Name</Link>
</Navbar.Brand>
<Navbar.Toggle />
</Navbar.Header>
<Navbar.Collapse>
<Nav>
<LinkContainer to={'/Home'}>
<NavItem>
<Glyphicon glyph='home' /> Home
</NavItem>
</LinkContainer>
<LinkContainer to={'/AuditLog'}>
<NavItem>
<Glyphicon glyph='th-list' /> Audit Log
</NavItem>
</LinkContainer>
<LinkContainer to={'/Copy'}>
<NavItem>
<Glyphicon glyph='glyphicon glyphicon-link' /> Copy
</NavItem>
</LinkContainer>
{/* <LinkContainer to={'/AddLicenses'}>
<NavItem>
<Glyphicon glyph='apple' /> Add Licenses
</NavItem>
</LinkContainer> */}
</Nav>
</Navbar.Collapse>
</Navbar>
</Container>
);
另外,这是我的 App.tsx 文件:
import { ImplicitCallback, Security } from '@okta/okta-react';
import * as React from 'react';
import { Route } from 'react-router';
import Layout from './components/Layout';
import AddLicenses from './components/Pages/AddLicenses';
import AuditLog from './components/Pages/AuditLog';
import Copy from './components/Pages/Copy';
import Home from './components/Pages/Home';
// Todo: Move OKTA configuration to its own file -- can be shared between client and server.
export const config = {
client_id: 'REDACTED',
issuer: 'REDACTED',
redirect_uri: window.location.origin + '/implicit/callback'
}
export default () => (
<Layout>
<Security issuer={config.issuer}
client_id={config.client_id}
redirect_uri={config.redirect_uri}
>
<Route path='/' exact={true} component={Home}/>
<Route path='/Home' exact={true} component={Home}/>
<Route path='/AddLicenses' component={AddLicenses} />
<Route path='/AuditLog' component={AuditLog} />
<Route path='/Copy' component={Copy} />
<Route path='/implicit/callback' component={ImplicitCallback}/>
</Security>
</Layout>
);
如果有更多信息可以提供澄清,我将很高兴这样做。我在这个问题上停留的时间太长了,而且我是唯一一个在这个应用程序上工作的开发人员,所以任何帮助都将不胜感激!
解决方案
我不知道为什么这个问题会以这种方式解决,但我至少找到了解决这个问题的方法。
我知道当我在服务器上设置路由时,无论页面是否存在,这都会路由任何请求。如果该页面存在,它会将您路由到该页面。如果不存在,则默认为 index.tsx。因此,我可以输入除副本之外的任何 URL 的事实意味着具有该特定路由的某些内容会导致问题。我做了一个简单的测试并更改了一个值:
<Route path='/Copy' component={Copy} />
我把它改成了
<Route path='/Copy2' component={Copy} />
通过更改为 /Copy2,该路由现在可以工作了。我不知道为什么。这条路线正在由 reactRouter 处理,因此其中的某些内容与我的路线不兼容。所以,我不会把它变成一个探索,而是在它的末尾保留一个 2 的路线。
推荐阅读
- javascript - Javascript:是否可以通过带有占位符的循环来初始化新类?
- timer - AHK如何立即停止计时器?
- c# - docker容器内的C# FTP服务器 - 连接问题
- c# - Azure CosmosDB SQL APi 如何保存创建文档时创建的日期
- c# - 我可以防止重命名暴露给外界的方法吗?
- jasmine - 茉莉“期待”和柴“期待”有什么区别?首选使用哪一个?
- csvhelper - 如何从行尾删除评论
- asp.net - 日期格式显示不正确
- docker - Redis 使用带有 3 个 Pod 的 Kube 部署时出错
- html - Flexbox 对齐项目中的内容