传递&作为路线参数的一部分

时间:2010-07-09 14:28:41

标签: asp.net-mvc routing asp.net-mvc-routing

不幸的是,我需要接受带有&的路由参数。在里面。我有这个路线定义。 id参数有时会有一个&就像这个X& Y001。

        routes.MapRoute(
            "AffiliateEdit",
            "Admin/EditAffiliate/{*id}",
            new { controller = "UserAdministration", action = "EditAffiliate", id = ""}
        );

我尝试过以下方式解决这个问题,但是没有一个有效。所有这些都导致浏览器中出现HTTP 400 Bad Request错误。

<a href="/Admin/EditAffiliate/<%= a.CustomerID.Replace("&", "%26") %>">Edit</a>

这给了我<a href="/Admin/EditAffiliate/X%26Y001">Edit</a>

<%= Html.RouteLink("Edit", "AffiliateEdit", new { id = a.CustomerID }) %>

这给了我<a href="/Admin/EditAffiliate/X&amp;Y001">Edit</a>

<%= Html.RouteLink("Edit", "AffiliateEdit", new { id = Url.Encode(a.CustomerID) }) %>

这给了我<a href="/Admin/EditAffiliate/X%2526Y001">Edit</a>

1 个答案:

答案 0 :(得分:1)

我能想到的唯一一件事(这是一个“肮脏的”解决方案)就是编码&amp;你自己。例如## 26 ##。 确保检查解码算法只解码&amp; id,而不是碰巧包含## 26 ##的id。例如。

根据数据库大小,更好的解决方案是更改数据库中的违规ID。