gpt4 book ai didi

hash - Durandal JS : typing url without hash give HTTP Error 404. 0 - 未找到

转载 作者:行者123 更新时间:2023-12-04 17:35:09 25 4
gpt4 key购买 nike

我正在使用 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.

如何映射 www.domain.com/pagewww.domain.com/#page ?

最佳答案

为了 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"});
}

基本上,我们告诉服务器忽略任何以以下开头的请求:
  • api/
  • 微风/
  • 应用程序/
  • 脚本/
  • 内容/
  • Assets /
  • 信号员/

  • 我们忽略了 api , breezesinglar因为 WEBApi 和 SignalR 将处理这些请求。另外, app , scripts , content , 和 assets被忽略,因为底层 ASP.NET 引擎将为这些请求提供服务。

    最后一条语句 ( routes.MapRoute) 导致所有未忽略的请求发回默认页面(SPA 中唯一的真实页面)。

    例如, www.domain.com/page将从服务器发送相同的响应,就像您要求 www.domain.com/ .一旦 SPA 加载和 Durandal 的 router/history已初始化,如果需要,后缀将转换为哈希(就像您使用 IE 一样),然后通过路由器分派(dispatch)。

    请注意,如果您的应用程序不是 Root 于 / ,您需要指定根路径。您还应该包括 hashChange: true这样您的应用程序就可以在 IE 中运行,如下所示:

    router.activate({ pushState: true, hashChange: true, root: '/approot' })

    关于hash - Durandal JS : typing url without hash give HTTP Error 404. 0 - 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22524667/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com