微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – 在ServiceStack上的Html5 pushstate Urls

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

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

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

我怎样才能最好地接近这个?

Order of Operations维基页面显示了您可以使用的不同挂钩的数量,以注入您自己的自定义行为以及它们的运行顺序.

使用RawHttpHandlers进行高级请求

您可以通过添加Config.RawHttpHandlers来完全绕过ServiceStack,以便在您想要hi-jack的请求上返回IHttpHandler,例如,这就是内置迷你探查器如何填充所有以ssr-开头的文件请求并返回物理文件

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

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

如果要为非匹配路由提供认处理程序,可以在AppHost.Configure()或插件注册CatchAllHandlers:

appHost.CatchAllHandlers.Add((string method,string pathInfo,string filepath) =>
{
    return ShouldProvideDefaultPage(pathInfo) 
        ? new RazorHandler("/defaultpage.cshtml")
        : null;
});

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

您可以创建虚拟服务并简单地返回相同的单个视图,例如:

[Route("/app/{PathInfo*}")]
public class App {
    public string PathInfo { get; set; }
}

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

使用外卡,此服务将返回视图,例如在/ app开头的任何路线上的/View/App.cshtml,例如:

> / app
> / app /你好
> / app / hello / my / name /是?foo = bar

分页支持

由于部分重载与pushstate有关,我还会提到ServiceStack内置支持部分重载.

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

您可以要求使用?format = text.bare param的部分页面,例如

>整页:http://www.servicestack.net/docs/markdown/about
>部分页面:http://www.servicestack.net/docs/markdown/about?format=html.bare
>部分页面降价:http://www.servicestack.net/docs/markdown/about?format=text.bare

虽然这使用Markdown Razor.在最新的ServiceStack.Razor支持中,您只需访问部分页面:?format = bare

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐