当前位置:  开发笔记 > 编程语言 > 正文

如何传递特殊字符,以便ASP.NET MVC可以正确处理查询字符串数据?

如何解决《如何传递特殊字符,以便ASP.NETMVC可以正确处理查询字符串数据?》经验,为你挑选了1个好方法。

我正在使用这样的路线:

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);
}

当我调用return RedirectToAction("NewInvoice", "Customer", new {name});并且name等于"C#Guy"时,"name"参数被截断为"The C".

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

谢谢!



1> Haacked..:

好吧,我确认这是现在在ASP.NET路由一个已知的问题,很遗憾.问题是在路由的深处,我们在转义Uri的路由参数时使用Uri.EscapeString.但是,该方法不会转义"#"字符.

请注意,#character(aka Octothorpe)在技术上是错误的字符.C♯语言实际上是一个"C",后跟一个Sharp符号,如音乐:http://en.wikipedia.org/wiki/Sharp_ (music )

如果您使用了尖锐的符号,那么可能会解决这个问题.:P

另一个解决方案,因为大多数人都想使用octothorpe是为这条路线写一条自定义路线,在获得虚拟路径路径后,使用编码#to%23的HttpUtility.UrlEncode对#符号进行编码.

作为后续行动,我想向您指出这篇博文,其中讨论了传递其他"无效"角色的问题.http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有