2015-01-06 17 views
5

私はASP.NET MVCアプリケーションを持っています。私はASP.NET vNextを学んでいます。これを行うために、私は既存のアプリケーションをvNextに移植することに決めました。私がよく分からないことは、私のルートを移植する方法です。私の原点ASP.NET MVCアプリケーションでASP.NET MVCルートをASP.NETに移行するvNext

、私は次のようしている:

RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.RouteExistingFiles = true; 

    routes.MapRoute(
    name: "Index", 
    url: "", 
    defaults: new { controller = "Root", action = "Index" } 
); 

    routes.MapRoute(
    name: "Items", 
    url: "items/{resource}", 
    defaults: new { controller = "Root", action = "Items", resource = UrlParameter.Optional } 
); 

    routes.MapRoute(
    name: "BitcoinIntegration", 
    url: "items/available/today/{location}", 
    defaults: new { controller="Root", action="Availability", location=UrlParameter.Optional } 
); 

    routes.MapRoute(
    name: "BlogPost1", 
    url: "about/blog/the-title", 
    defaults: new { controller = "Root", action = "BlogPost1" } 
); 
} 

は今、このASP.NET vNextの世界で、私はどのようにわからないんだけど経路を設定する。私は、次のしている:

Startup.cs

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Routing; 
using Microsoft.Framework.DependencyInjection; 

namespace MyProject.Web 
{ 
    public class Startup 
    { 
     public void Configure(IApplicationBuilder app) 
     { 
      app.UseErrorPage(); 

      app.UseServices(services => 
      { 
       services.AddMvc(); 
      }); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute("areaRoute", "{area:exists}/{controller}/{action}"); 
      }); 

      app.UseMvc(); 
      app.UseWelcomePage(); 
     } 
    } 
} 

それでも、私は二つのわからない:

  1. 私は以前RouteConfig.csで定義されたルートを追加する方法。
  2. app.UseWelcomePage()の代わりにviews/home/Index.cshtmlをデフォルトパスとして使用する方法。
+2

'app.UseMvc(routes => RouteConfig.RegisterRoutes(routes))の何が問題なのですか?これはvNextの区別ではなく、Global.asaxに明示的にルートを登録するのではなく、あなたのアプリケーションをブートストラップするためにOWINを使用していることを除けば、通常のMVCです。ルーティングは同じですが、別の場所から 'RegisterRoutes'を呼び出すだけです。あなたの他のHome/Indexの問題に関しては、 'UseWelcomePage'への呼び出しを削除するだけです。あなたのルーティングは、そうしなければ何をしているのかを行います。 –

+0

@AntP - vNextにはさらに「推奨される」アプローチがありますか?私はそれが正しい方法を学ぶように、vNextとできるだけ一貫しているように努めています。ありがとうございました。 –

+0

'UseMvc'に渡すデリゲートにあなたのルートを含める必要があります。あなたが' RouteConfig 'を呼び出すかどうかは関係ありません。RegisterRoutes(routes) 'を呼び出すか、匿名デリゲートを宣言してそこにすべてのルーティングコードを追加するだけです(現在の例のように)。おそらく 'Configure'メソッドを膨らませないようにするために、' RouteConfig'に入れておきます。 vNext規約は、すでに行っている(Global.asaxを使うのではなく)アプリケーションをブートストラップするためにOWINを使うことを指示するだけです。 –

答えて

4

免責事項: vNextはまだベータ版であることからも、次の分または次の時間で、私はここに示したコードはすぐに時代遅れになる可能性があり、時間ごとに解約受けています!それが起こった場合、の投票が "これは機能していません"の投票の前に、私にコメントをお送りください。私は現在のレベルまで持ち上げるように最善を尽くします。

登録ルート: 変更はほとんどありませんが、全体的なアプローチは変わりません。ここでは、あなたのリファクタリングRouteConfigです:

RouteConfig.cs

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Routing; 

public class RouteConfig 
{ 
    // instead of RouteCollection, use IRouteBuilder 
    public static void RegisterRoutes(IRouteBuilder routes) 
    { 
    // routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); -> gone 
    // routes.RouteExistingFiles = true; -> gone 

    routes.MapRoute(
     name: "Index", 
     template: "", 
     defaults: new { controller = "Root", action = "Index" } 
    ); 

    // instead of UrlParameter.Optional, you use the ? in the template to indicate an optional parameter 
    routes.MapRoute(
     name: "Items", 
     template: "items/{resource?}", 
     defaults: new { controller = "Root", action = "Items" } 
    ); 

    ... // ignored for brevity (since their registration is along the same lines as the above two). 
    } 
} 

Startup.cs

public void Configure(IApplicationBuilder app) 
{ 
    // ... other startup code 

    app.UseMvc(RouteConfig.RegisterRoutes); 

    // ... other startup code 
} 

:あなたは非常によく、ここでルート登録をインライン化することができますが、私は好みますそれを別のファイルに入れて、クラッタをなくしてください。Startup.cs

UseWelcomePageをあなた自身のものにするには、異なる過負荷hereを見てください。

+0

RouteConfigを一時的なサービスとして登録し、それをConfigureメソッドに注入する必要がありますか? – koryakinp

+0

私はそれが過度のことだと思います。 – Mrchief

関連する問題