如何安全地禁用一个视图的段重用?

时间:2016-04-22 19:26:19

标签: c# razor asp.net-mvc-5 asp.net-mvc-routing

我有这3条注册路线(按照相同的顺序):

routes.MapRoute(null, "{controller}/{categoryName}/Page{pageNumber}", 
                new { action = "List" }, new { controller = "Products" });
routes.MapRoute(null, "{controller}/Page{pageNumber}", 
                new { action = "List" }, new { controller = "Products" });
routes.MapRoute(null, "{controller}/{categoryName}", 
                new { action = "List" }, new { controller = "Products" });

传入的网址为:http://localhost:2575/Products/Housing/Page5。 然后,在视图中,我想生成传出的Url: http://localhost:2575/Products/Housing

我的代码是:

@Html.ActionLink(Model.CategoryName, "List",
                 new { categoryName = Model.CategoryName },
                 new { @class = "btn btn-info);

但它生成了所需的网址(http://localhost:2575/Products/Housing): http://localhost:2575/Products/Page5?categoryName=Housing

我的单位测试了我的路线方案和这条路线数据:

var routeData = new { controller = "Products", action = "List", categoryName = "Housing" };

它正确生成了预期的网址(http://localhost:2575/Products/Housing

所以,我认为,不知何故,上面的Html帮助器,正在采用当前的路由值,并试图重用它们,这是我可以找到的唯一解释为pageNumber的值为5当我没有& #39; t指定辅助方法。

另外,如果在视图中,在生成URL之前我会这样做:

var controller = ViewContext.RouteData.Values["controller"];
var action = ViewContext.RouteData.Values["action"];
ViewContext.RouteData.Values.Clear();
ViewContext.RouteData.Values.Add("controller", controller);
ViewContext.RouteData.Values.Add("action", action);

然后正确生成URL。 注意:删除(或修改)" categoryName"的值路由值不起作用,它会继续将pageNumber设置为辅助方法。

如果是这种情况(片段重用),我该如何安全地禁用它?我害怕必须清除路线数据然后打破别的东西。如果没有,这里出了什么问题?

0 个答案:

没有答案