1

いくつかの階層(ファイルシステムなど)をナビゲートできる単一のメソッドを備えたコントローラーが必要です。

つまり、柔軟なルートを使用してこのメ​​ソッドにアクセスし、ルートの一部をパラメーターとして取得できるようにしたいと考えています。たとえば、この階層の場合

Root
  Sub-folder-A
  Sub-folder-B
    Sub-folder-C

次のルートでフォルダにアクセスしたい

mymvcapplication/explorer/root
mymvcapplication/explorer/root/sub-folder-a
mymvcapplication/explorer/root/sub-folder-b/sub-folder-c

適切に実装するには、何をどこで構成する必要がありますか?

4

1 に答える 1

2

リクエスト URL で可変数の URL パラメーター値をサポートする*には、ルート定義でメソッド パラメーターにプレフィックスを付けます。

MVC 属性ルーティングでは、

[Route("explorer/root/{*levels}")]
public ActionResult Details(string levels = "")
{
    if (String.IsNullOrEmpty(levels))
    {
        //request for root
    }
    else
    {
        var levelArray = levels.Split('/');
        //check level array and decide what to do 
    }
    return Content("Make sure to return something valid :) ");
}

で始まる最後のパラメーターは、後に URL に何かを格納するキャッチオール*パラメーターのようなものです。explorer/root

したがって、 をリクエストするyoursite.com/explorer/root/a/b/c/dと、デフォルトのモデル バインダーが値"a/b/c/d"levelsパラメーターにマップします。その文字列に対してメソッドを呼び出してSplit、URL セグメントの配列を取得できます。

アトリビュート ルーティングを有効にするには、 に移動して のメソッドRouteConfig.csを呼び出します。MapMvcAttributeRoutes()RegisterRoutes

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

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }  
    );
}
于 2016-01-03T04:53:54.060 に答える