私はangular2とMVC5を使ってシングルページアプリケーションを作成しています。私は両方の新しいですが、私はルーティングに問題があります。私のようにURLを一致したいと思いますMVC6は単一ページアプリケーションへのルーティングを失うことなく404
:ファイルが存在する場合> -
/
- > RESTのAPI/{*anythingelse}
- >私のインデックスページ、ブートストラップの角度/api/{controller}/{id?}
に行きます静的コンテンツとして返します。さもなければ、角度がそれを送ることができるならば、角度のあるルートを持ってください;そうでなければ404を返します。
2つ目のポイントは簡単です.404のリターンをあきらめることができれば、クライアント側のルーティングが機能しますが、私はそれをすべて調整することはできません。
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "api",
template: "api/{controller}/{id?}");
routes.MapRoute(
name: "spa",
template: "{*anythingelse}",
defaults: new { controller = "Home", action = "Index" });
});
と::
はこれが働くべきように思える
@RouteConfig([
{ path: "/", name: 'Splash', component: SplashView },
{ path: '/accounts/login', name: 'Login', component: LoginView },
{ path: '/accounts/register', name: 'Registration', component: RegistrationView },
{ path: '/home/...', name: 'Home', component: HomeView },
])
をしかし、それは単なる静的なファイルではありませんすべての要求に対してIndex.cshtmlを提供しています。
私はこれがすでに解決されている必要があるように感じますが、私はそれについてオンラインで何かを見つけることができませんでした。どのようにこれを正しく行うのですか?
ハッシュスタイルではなく「HTML5」スタイルのパスを使用しています。
で始まるすべての要求へのすべてのルートがあなたのREST APIが使用しているあなたのキャッチを防ぐことができますWebApi? WebApiはMVCとは別のフレームワークであり、独自のルート構成を持っています。 MVC(WebApiではなく)を使用している場合は、正しく設定されていません。デフォルトアクション 'defaults:new {action =" Index "}'またはURL 'api/{controller}/{アクション}/{id?} '。 – NightOwl888
また、経路の順序についてのあなたの前提は不可能です。Angularはブラウザで実行されるため、最初にルーティングされます。それ以外の場合は、サーバー側で構成した順番に、構成したルートが試行されます。リクエストがサーバーにヒットしたら、もう一度Angularに制御を戻すことはできません。 – NightOwl888
ああ、私の謝罪。私はMVC5を落としましたが、ASP.NET 5ではMVC6を意味していました.ASP.NET 5では、WebAPIとMVCのルータがマージされました。 – Emdot