MVC3 URL编码?

时间:2011-07-18 00:24:42

标签: asp.net-mvc-3 url routing url-routing url-encoding

ASP.NET MVC3 / Razor。

我发现当我创建一个动作链接时,比如说:

@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, null)

MVC3引擎创建我的产品链接。例如:

http://myhost/{ActionUrl}/PRODID

但是,如果我的产品ID包含任何特殊字符,则不会对其进行URL编码。

http://myhost/{ActionUrl}/PROD/ID

当然,这会破坏我的路由。 我的问题是:

  1. 我是否应该自动将url编码为值?有没有办法设置它?
  2. 如果没有,那么对这些进行编码和解码最简洁的方法是什么?我真的不想在每个控制器中都这样做。
  3. 谢谢!

2 个答案:

答案 0 :(得分:4)

如果您的ID包含特殊字符,我建议您将其作为查询字符串传递,而不是路径的一部分。如果没有为崎岖不平的道路做好准备。查看following blog post

答案 1 :(得分:1)

我没有让它在路径中工作,但是为了使这个工作作为QueryString参数,因为@Darin在这里指出的是代码:

@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, "")

为我创建了actionLink作为查询字符串:Products/Detail?id=PRODUCTID

我在Global.asax.cs中的路线如下所示:

    routes.MapRoute(
        "ProductDetail",
        "Products/Detail",
        new { controller = "Products", action = "Detail" }
        );

在我的ProductController中:

public ActionResult Detail(string id)
{
    string identifier = HttpUtility.HtmlDecode(id);
    Store.GetDetails(identifier);
    return RedirectToAction("Index", "Home");
}