angularjs – 在ServiceStack上的Html5 pushstate Urls

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Angularjs相关文章