NancyFX は「Catch All」ルートのような ASP.NET MVC をサポートしていますか? 基本的にすべての URL に一致するものが必要です。これは、シングル ページ アプリケーションを構築する場合に非常に便利です。
それは可能ですか?
NancyFX は「Catch All」ルートのような ASP.NET MVC をサポートしていますか? 基本的にすべての URL に一致するものが必要です。これは、シングル ページ アプリケーションを構築する場合に非常に便利です。
それは可能ですか?
Tested in Nancy version 0.23.2
Get[@"/(.*)"]
キャッチオールルートとしてはうまくいきませんでした。ルート"/"、"/foo/bar"、およびより長いルートはキャッチされません。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"];
};
パターン スコアリングを理解することが重要です。ルート パターンは重み付けされます。2 つのルートが同じ URL セグメントに一致する場合は、スコアが高い方が優先されます。キャッチオール パターンは重み付け0
されており、/views/{uri*}
ルート パターンもキャッチオールですが、重み付けされたリテラルで始まるため、 /views10000
で始まるすべてのルートで優先されます。
Owin の環境変数へのアクセスの詳細については、こちらを参照してください。キャプチャされたuri
変数 とrequestPath
はわずかに異なることに注意してください。変数はそうではないので、 は where でrequestPath
始まります。また、一致したルート パターンが の場合、は になり、は になります。/
uri
Get["/"]
uri
null
requestPath
"/"
Viewsルートは、url パスに基づいて部分的な html ファイルを返し、他のすべてのルートは、SPA をブートストラップするデフォルトのレイアウト ページを返します。
はい、正規表現を使用します
Get[@"/(.*)"] = parameters => {
return View["viewname", parameters];
};
ただし、NancyFX を使用してシングル ページ アプリケーションを構築する場合は、実際には必要ありません。すべてのルーティング ロジックで Get と Post を使用するだけで、シングル ページ アプリを作成できます。
@synhershko が提供する回答が機能しません。/users/2 やその他のセグメントを含むルートは処理しません。
以下のコードは私のマシンで動作します;):
public class IndexModule : NancyModule
{
dynamic IndexPage() { return View["Index"]; }
public IndexModule()
{
Get["/"] = _ => { return IndexPage(); };
Get["/(.*)"] = _ => { return IndexPage(); };
Get["/(.*)/(.*)"] = _ => { return IndexPage(); };
Get["/(.*)/(.*)/(.*)"] = _ => { return IndexPage(); };
}
}
私の解決策は完璧ではありません。すべてに一致するとは限りません。最長の Angular ルートと同じ数の「/(.*)」を繰り返しました。