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 部分页面支持 由于部分重载与pushstate有关,我还会提到ServiceStack内置支持部分重载. ServiceStack Docs是一个示例演示,它在支持它的浏览器上使用pushstate,否则它会回退到使用不支持浏览器的整页重新加载. 您可以要求使用?format = text.bare param的部分页面,例如 >整页:http://www.servicestack.net/docs/markdown/about 虽然这使用Markdown Razor.在最新的ServiceStack.Razor支持中,您只需访问部分页面:?format = bare (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |