asp.net-mvc – 如何传递特殊字符使ASP.NET MVC可以正确处理查询字符串数据?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何传递特殊字符使ASP.NET MVC可以正确处理查询字符串数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用像这样的路线:
routes.MapRoute("Invoice-New-NewCustomer","Invoice/New/Customer/New/{*name}",new { controller = "Customer",action = "NewInvoice" },new { name = @"[^\.]*" });

有一个处理这条路线的动作:

public ActionResult NewInvoice(string name)
{
    AddClientSideValidation();
    CustomerViewData viewData = GetNewViewData();
    viewData.InvoiceId = "0";
    viewData.Customer.Name = name;
    return View("New",viewData);
}

当我调用返回RedirectToAction(“NewInvoice”,“Customer”,new {name});并且名称等于“C#Guy”,“name”参数被截短为“C”.

所以我的问题是:使用ASP.NET MVC处理这种特殊字符的最好方法是什么?

谢谢!

解决方法

好的,我确认这是现在ASP.NET路由中的一个已知问题,不幸的是.问题在于,在路由深处,我们在转移Uri的路由参数时使用Uri.EscapeString.但是,该方法不会退出“#”字符.

请注意,#字符(也称为Octothorpe)在技术上是错误的字符. C♯语言实际上是一个“C”,其次是音乐中的夏普标志:http://en.wikipedia.org/wiki/Sharp_(music)

如果你使用了尖锐的标志,那可能会解决这个问题. :P

另一个解决方案,因为大多数人想要使用octothorpe是为此路由编写一个自定义路由,并且在获取虚拟路径路径之后,使用编码#到#的HttpUtility.UrlEncode编码#符号.

作为一个后续行动,我想指出这个博文,其中谈到传递其他“无效”字符. http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

猜你在找的asp.Net相关文章