gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:11:08 26 4
gpt4 key购买 nike

我正在使用这样的路线:

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 等于“The 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 对 # 符号进行编码,将 # 编码为 %23。

作为后续内容,我想向您指出这篇博客文章,其中讨论了传递其他“无效”字符。 http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

关于asp.net-mvc - 如何传递特殊字符以便 ASP.NET MVC 可以正确处理查询字符串数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com