NancyFX Catch All 路线
-
12-12-2019 - |
题
NancyFX 是否支持 ASP.NET MVC(如“Catch All”路由)?我需要一个,基本上匹配每个 URL。这对于构建单页应用程序非常方便。
那可能吗?
解决方案
是,使用Regex
Get[@"/(.*)"] = parameters => {
return View["viewname", parameters];
};
.
但您真的不需要它为使用nancyfx构建一个页面应用程序 - 您只需使用您的所有路由逻辑以及仍有单页应用程序。
其他提示
Tested in Nancy version 0.23.2
Get[@"/(.*)"]
作为一条包罗万象的路线对我来说不起作用。路线 "/", “/foo/酒吧”, ,并且更长的路线不会赶上。似乎必须定义一个 Get["/"]
根 URL 的路由。似乎没有其他东西可以抓住它(尝试过 Get["{uri*}"]
)。以下是我最终定义路线的方式(请记住,我是为 Angular 应用程序执行此操作):
Get["/views/{uri*}"] = _ => { return "A partial view..."; };
Get["/"] =
Get["/{uri*}"] = _ =>
{
var uri = (string)_.uri;// The captured route
// If you're using OWIN, you can also get a reference to the captured route with:
var environment = this.Context.GetOwinEnvironment();// GetOwinEnvironment is in the 'Nancy.Owin' namespace
var requestPath = (string)environment["owin.RequestPath"];
return View["views/defaultLayout.html"];
};
理解这一点很重要 模式评分. 。路由模式是加权的,如果两条路由匹配相同的 url 段,则分数较高者获胜。包罗万象的模式是加权的 0
并且尽管 /views/{uri*}
路由模式也是一个包罗万象的东西,它以一个文字开头,它是加权的 10000
, ,所以它将在所有以 /观看次数.
这里有更多信息 访问 Owin 的环境变量. 。请注意,捕获的 uri
变量和 requestPath
会略有不同。这 requestPath
将从 /
其中作为 uri
变量不会。另外,如果匹配的路由模式是 Get["/"]
, uri
将 null
和 requestPath
将 "/"
.
这 意见 路由将根据 url 路径返回部分 html 文件,所有其他路由将返回将引导 SPA 的默认布局页面。
@synhershko解决方案不起作用的更新答案。尝试:
Get[@"^(.*)$"] = parameters => {
return "hi";
};
.
这将捕获除索引页面之外的所有路径。我不确定这是否会在角度的上下文中工作,但是在尝试用一个处理程序中掌握一个简单的服务器时,这为我工作。
@synhershko提供的答案对我不起作用。它没有处理/用户/ 2或包含更多段的任何其他路由。
在我的机器上工作以下代码;):
public class IndexModule : NancyModule
{
dynamic IndexPage() { return View["Index"]; }
public IndexModule()
{
Get["/"] = _ => { return IndexPage(); };
Get["/(.*)"] = _ => { return IndexPage(); };
Get["/(.*)/(.*)"] = _ => { return IndexPage(); };
Get["/(.*)/(.*)/(.*)"] = _ => { return IndexPage(); };
}
}
.
我的解决方案并不完美,导致它与所有东西不匹配。我在我最长的角度途中重复了很多'/(.**)。