我想要做的是启用对html5 pushstate的支持(所以URL中没有哈希),但到目前为止我发现的唯一示例涉及使用通配符路由依赖MVC,并将ServiceStack基础结构推送到/ api subroute.
我们不能接受MVC依赖,所以我认为我们需要接受:text / html请求我们需要接受任何url并提供我们的根应用程序.我很乐意删除默认的HtmlFormat扩展或覆盖它(我们仍然可以使用它所需的JsonReport内容类型).
我怎样才能最好地接近这个?
使用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