0

私は ASP.NET ルーティングを紹介したばかりで、現在 2 つのルートを登録しています。

        routes.MapPageRoute(
            "default",
            "{Path}/{Name}.aspx{Query}",
            "~/Default.aspx",
            true,
            new RouteValueDictionary { { "Name", "default" } },
            new RouteValueDictionary { { "Name", @"[-_\w]+" } });

        routes.MapPageRoute(
            "home",
            "{Name}.aspx{Query}",
            "~/Default.aspx",
            true,
            new RouteValueDictionary { { "Name", "default" } },
            new RouteValueDictionary { { "Name", @"[-_\w]+" } });

ただし、これらのルートを使用して URL を作成しようとすると、常に例外が発生します。私はこれを試しました:

private string GetVirtualPath(RouteValueDictionary values)
{
    return RouteTable.Routes.GetVirtualPath(
    null, values).VirtualPath;
}

そしてこれも:

private string GetVirtualPath(RouteValueDictionary values)
{
    var wrapper = new HttpContextWrapper(HttpContext.Current);
    return RouteTable.Routes.GetVirtualPath(
        new RequestContext(wrapper,
          RouteTable.Routes.GetRouteData(wrapper)), 
              values).VirtualPath;
}

RouteTable.Routes.GetVirtualPathいずれにせよ、次の呼び出し時にnull 参照例外が発生します。

GetVirtualPath(new RouteValueDictionary { { "Name", entity.Name } });

あるいは:

GetVirtualPath(new RouteValueDictionary { { "Name", entity.Name }, { "Query", string.Empty } });

ここで何が間違っているのでしょうか?

4

1 に答える 1

1

私は自分の質問に答えると思います。問題は私のルート制限にありました。行を削除すると、new RouteValueDictionary { { "Name", @"[-_\w]+" } }すべてが機能し始めました。

于 2011-03-10T06:03:25.557 に答える