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["/"], urinullrequestPath"/".

意见 路由将根据 url 路径返回部分 h​​tml 文件,所有其他路由将返回将引导 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(); };
    }
}
.

我的解决方案并不完美,导致它与所有东西不匹配。我在我最长的角度途中重复了很多'/(.**)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top