質問

私は MVC (および ASP.Net ルーティング) を初めて使用します。地図を作成しようとしています *.aspx というコントローラに PageController.

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

上記のコードは *.aspx を次のようにマッピングするのではないでしょうか? PageController?これを実行して .aspx ページを入力すると、次のエラーが発生します。

パス '/Page.aspx' のコントローラーが見つからないか、IController インターフェイスが実装されていません。パラメータ名:コントローラの種類

ここで私がやっていないことはありますか?

役に立ちましたか?

解決

私は自分自身の質問に答えただけです。ルートが後方にありました(デフォルトはページ上にありました)。

はい、すべてのカスタム ルートをデフォルト ルートの上に配置する必要があります。

そこで次の疑問が生じます...「デフォルト」ルートは、「ページ」ルートとどのように一致しますか?

デフォルト ルートは、いわゆる「設定よりも規約」に基づいて一致します。Scott Guthrie は、ASP.NET MVC に関する最初のブログ投稿でそれについて詳しく説明しています。この本と彼の他の投稿を一読することをお勧めします。これらは最初の CTP に基づいて投稿されており、フレームワークは変更されていることに注意してください。Scott Hanselman の asp.net サイトでは、ASP.NET MVC の Web キャストを見つけることもできます。

他のヒント

私は自分自身の質問に答えただけです。ルートを逆にしました(デフォルトはページの上にありました)。以下が正しい順序です。そこで次の疑問が生じます...「デフォルト」ルートは(ここでは正規表現を使用していると思います)「ページ」ルートとどのように一致しますか?

routes.MapRoute(
            "Page",
            "{Name}.aspx",
            new { controller = "Page", action = "Display", id = "" }
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

Rob Conery の MVC ストアフロントの 1 つ スクリーンキャスト, 、彼はまさにこの問題に遭遇しました。興味のある方は23分あたりからご覧ください。

コントローラーがどのように表示されているかわかりませんが、エラーはコントローラーが見つからないことを示しているようです。PageController クラスを作成した後、Controller を継承しましたか?PageController は、Controllers ディレクトリにありますか?

Global.asax.cs の私のルートは次のとおりです。

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" }
);

これが私のコントローラーです。コントローラーフォルダーにあります。

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
public class AspxRouteConstraint : IRouteConstraint
{
    #region IRouteConstraint Members

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return values["aspx"].ToString().EndsWith(".aspx");
    }

    #endregion
}

すべての aspx のルートを登録します

  routes.MapRoute("all", 
                "{*aspx}",//catch all url 
                new { Controller = "Page", Action = "index" }, 
                new AspxRouteConstraint() //return true when the url is end with ".aspx"
               );

そして、次のようにしてルートをテストできます MvcRouteVisualizer

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top