Jas*_*son 5 hash http-status-code-404 durandal
我正在使用Durandaljs构建SPA应用程序.当我输入一个没有哈希的URL时,它显示错误:HTTP error 404.0 - NOT FOUND.但是,它正常工作与哈希.
例:
www.domain.com/page => HTTP error 404.0 - NOT FOUND
www.domain.com/#page = > working fine.
Run Code Online (Sandbox Code Playgroud)
我该如何映射www.domain.com/page到www.domain.com/#page?
小智 6
为了pushState在您的应用程序中正常工作(包括深层链接),您必须为pushState配置路由器,并告诉服务器忽略除特定路径/路由之外的所有路径.
服务器应忽略包含SPA使用的资源或服务的路径,并且应始终为这些被忽略的路由发送Durandal.cshtml (或任何名称).
即使请求中有其他路由信息,也应忽略这些路由.这将允许使用pushState样式的URL进行深层链接.
这是我最近完成的基于Durandal的应用程序的MVC路由:
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Ignore("{resourcedir}/{*resource}",
new {resourcedir = @"(api|breeze|app|scripts|content|assets|signalr)"});
routes.MapRoute(
name: "Default",
url: "{*sparoute}",
defaults: new { controller = "Durandal", action = "Index"});
}
Run Code Online (Sandbox Code Playgroud)
基本上,我们告诉服务器忽略任何以下开头的请求:
我们忽略了api,breeze并且singlar因为和的WebAPI将SignalR处理这些请求.此外,app,scripts,content,和assets被忽略,因为底层的ASP.NET引擎将成为这些请求.
最终的语句(routes.MapRoute)会导致所有未被忽略的请求发回默认页面(SPA中唯一的真实页面).
例如,www.domain.com/page将从服务器发送相同的响应,就像您要求的那样www.domain.com/.一旦SPA加载并且Durandal router/history已初始化,后缀将根据需要转换为哈希(就像您使用的是IE),然后通过路由器发送.
请注意,如果您的应用程序未植根/,则需要指定根路径.您还应该包括hashChange: true以便您的应用程序在IE中工作,如下所示:
router.activate({ pushState: true, hashChange: true, root: '/approot' })
Run Code Online (Sandbox Code Playgroud)
您可以,我正在我最新的 Durandal 网站中使用它,该网站基于DurandalAuth模板。
当您初始化路由器时,请进行设置pushState: true,如下所示:
return router.map([
{ route: 'somroute', moduleId: 'somroute', title: 'Home', nav: true, hash: "#somroute" }
])
.buildNavigationModel()
.mapUnknownRoutes("notfound", "notfound")
.activate({ pushState: true });
Run Code Online (Sandbox Code Playgroud)
您可以在我的网站上看到一个工作示例:noadou
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |