gpt4 book ai didi

angularjs - ServiceStack 上的 Html5 推送状态 URL

转载 作者:行者123 更新时间:2023-12-05 00:29:55 25 4
gpt4 key购买 nike

目前,我们在 ServiceStack 的根目录中使用 default.cshtml View 来为我们的 AngularJS 单页应用程序提供服务。

我想做的是启用对 html5 pushstate 的支持(因此 URL 中没有哈希),但到目前为止我发现的唯一示例涉及对带有通配符路由的 MVC 的依赖,并将 ServiceStack 基础架构推送到/api 子路由。

我们不能接受 MVC 依赖,所以我认为我们需要 accept:text/html 请求,我们需要接受任何 url 并提供我们的根应用程序。我很乐意删除默认的 HtmlFormat 扩展名或覆盖它(我们仍然可以使用我们需要的 JsonReport 内容类型)。

我怎样才能最好地解决这个问题?

最佳答案

Order of Operations wiki 页面显示了您可以利用的不同钩子(Hook)的数量来注入(inject)您自己的自定义行为以及它们的运行顺序。

使用 RawHttpHandlers 劫持请求

您可以通过添加 Config.RawHttpHandlers 完全绕过 ServiceStack返回 IHttpHandler在您想要劫持的请求上,例如,这是内置迷你分析器劫持所有以 ssr- 开头的文件的请求的方式并返回物理文件:

config.RawHttpHandlers.Add((IHttpRequest request) => {
var file = GetFileNameWithoutExtension(request.PathInfo);
return file != null && file.StartsWith("ssr-")
? new MiniProfilerHandler()
: null;
}

为不匹配的路由提供回退处理程序

如果您想为不匹配的路由提供默认处理程序,您可以注册 CatchAllHandlers AppHost.Configure()或在插件中:
appHost.CatchAllHandlers.Add((string method, string pathInfo, string filepath) =>
{
return ShouldProvideDefaultPage(pathInfo)
? new RazorHandler("/defaultpage.cshtml")
: null;
});

使用通配符接受服务中的任何 url

您可以创建一个虚拟服务并简单地返回相同的单个 View ,例如:
[Route("/app/{PathInfo*}")]
public class App {
public string PathInfo { get; set; }
}

public class MyService : Service
{
public object Any(App request)
{
return request;
}
}

使用通配符,此服务将返回 View ,例如 /View/App.cshtml在以 /app 开头的任何路线上,例如:
  • /app
  • /app/你好
  • /app/hello/my/name/is?foo=bar

  • 部分页面支持

    由于部分重载与 pushstate 相关,我还将提到 ServiceStack 对部分重载的内置支持。

    ServiceStack Docs是一个示例演示,它在支持它的浏览器上使用 pushstate,否则它会回退到对不支持它的浏览器使用全页重新加载。

    您可以通过 ?format=text.bare 索取部分页面参数,例如
  • 整页:http://www.servicestack.net/docs/markdown/about
  • 部分页面:http://www.servicestack.net/docs/markdown/about?format=html.bare
  • 部分页面 Markdown :http://www.servicestack.net/docs/markdown/about?format=text.bare

  • 虽然这使用了 Markdown Razor .在最新的 ServiceStack.Razor 支持中,您可以通过以下方式访问部分页面: ?format=bare

    关于angularjs - ServiceStack 上的 Html5 推送状态 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700464/

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