加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:53:23 所属栏目:asp.Net 来源:网络整理
导读:我正在使用像这样的路线: routes.MapRoute("Invoice-New-NewCustomer","Invoice/New/Customer/New/{*name}",new { controller = "Customer",action = "NewInvoice" },new { name = @"[^.]*" }); 有一个处理这条路线的动作: public ActionResult NewInvoic
我正在使用像这样的路线:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读