私のウェブサイトプロジェクトにはasp.net mvcが使用されています。私は私のroutedataに間違ったことがあると思うが、私はそれが間違っているか、または大丈夫であると確信していない。私は状況を説明します。私は、生成されたキーMVC RouteDatasが混乱しています
public static string GetKeyFromActionExecutingContext(ControllerContext filterContext)
{
StringBuilder keyBuilder = new StringBuilder();
if (filterContext.IsChildAction)
keyBuilder.Append("C-");
else
keyBuilder.Append("P-");
foreach (var item in filterContext.RouteData.Values)
{
keyBuilder.AppendFormat("{0}={1}.", item.Key, item.Value);
}
return keyBuilder.ToString();
}
元にキャッシュに自分の行動の結果(HTML出力)をキャッシュしています :ホームページの場合は、生成されたキャッシュキーは、P-コントローラー= Home.Action =インデックスと
は私も持っていますLoginBoxのような私のsitemasterのchildactions(MembershipController/LoginBoxにあります) そのキャッシュキーはC-Controller = Membership.Action = LoginBoxです。
今まではすべてがオッケーです。
は、私はまた、私は、生成された
私は、ドメイン/カテゴリ1 からサブカテゴリを閲覧しています ドメイン/カテゴリ1 ドメイン/カテゴリ1/subcategory1 ドメイン/カテゴリ1/subcategory2 ドメイン/カテゴリ2のように私のウェブサイトでサブカテゴリを持っています コントローラー=会員 アクション= LoginBox CTG1 =カテゴリ1 :私のroutedatasは
filterContext.RouteData.Valuesが間違っているので、キーが失敗していますctg2 = "" ctg3 = ""
なぜこれらが混在しているのですか?それは "カテゴリ"のルーテッドマッピングを使用していますが、私は "デフォルト"のルーテッドマッピングを使用しなければならないと思います。また
routes.MapRoute(
"Category",
"{ctg0}/{ctg1}/{ctg2}/{ctg3}",
new
{
controller = "Category",
action = "Index",
ctg0 = "",
ctg1 = "",
ctg2 = "",
ctg3 = ""
},
new
{
ctg0 = new CategoryRouteConstraint(),
}
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" },
new { controller = @"[^\.]*" }
);
以下のような
私のGlobal.asaxうまくいけば、これはあなたを助けるかもしれない、それはそのctg0値DBからチェックしている私のCategoryRouteConstraint方法は、カテゴリ名
public class CategoryRouteConstraint : IRouteConstraint
{
public Boolean Match(
HttpContextBase httpContext,
Route route,
String sParameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
if ((routeDirection == RouteDirection.IncomingRequest))
{
if (values["ctg0"] != null && !string.IsNullOrEmpty(values["ctg0"].ToString()))
return Category.IsRoutingForCategory(values["ctg0"].ToString());
return false;
}
return false;
}
}