C# 如何跳过ASP.NET路由中的编码参数

C# 如何跳过ASP.NET路由中的编码参数,c#,asp.net,asp.net-mvc,webforms,C#,Asp.net,Asp.net Mvc,Webforms,在我的ASP.NET WebForm应用程序中,我有一个简单的规则: routes.MapPageRoute(“RouteSearchSimple”,“search/{SearchText}”,“~/SearchTicket.aspx”) 作为“SearchText”参数,我需要使用西里尔文字,因此要创建Url,我使用: string searchText = "текст"; string url = Page.GetRouteUrl("RouteSearchSimple",

在我的ASP.NET WebForm应用程序中,我有一个简单的规则:

routes.MapPageRoute(“RouteSearchSimple”,“search/{SearchText}”,“~/SearchTicket.aspx”)

作为“SearchText”参数,我需要使用西里尔文字,因此要创建Url,我使用:

string searchText = "текст";
string url = Page.GetRouteUrl("RouteSearchSimple",
            new
            {
                SearchText = searchText
            });
GetRouteUrl自动对searchText值进行编码,结果 url=/search/%D1%82%D0%B5%D0%BA%D1%81%D1%82

但我需要->/search/цццСц

如何通过Page.GetRouteUrl函数获取它


非常感谢

事实上,我相信阿列克谢·列文科夫已经接近答案了。最终,URL可能只包含ASCII字符,因此字母数字字符以外的任何内容都将进行URL编码(甚至包括空格之类的内容)

现在,就您的观点而言,有些浏览器将显示非ASCII字符,但这取决于浏览器的实现(在幕后,它仍在执行编码)。然而,GetRouteUrl每次都会返回ASCII编码的表单,因为这是URL的一个要求

(顺便说一句,“大约有8年历史的文档”定义了URL。它是作者写的。他对互联网产生了一些影响。)

更新


因为你让我感兴趣,我做了更多的研究。看起来好像真的存在。然而,据我从文章中了解,在封面下,ToASCII或ToUnicode应用于名称。可以在此规范中阅读更多内容:。所以,再一次,你仍然在同一点上。更多的讨论可以在这里找到。

好的,伙计们,谢谢你们的回复,这很有帮助。简单的回答是:不可能通过Page.GetRouteUrl()函数实现这一点。很奇怪,为什么它没有像我们在Request.params或.QueryString中那样依赖于开发人员来开发编码/解码参数,或者至少它是开发人员可以控制的一些备用路由函数

我发现的一种方法是从RouteTable获取Url并手动解析它,在我的情况下,它将类似于:

string url = (System.Web.Routing.RouteTable.Routes["RouteSearchSimple"] as System.Web.Routing.Route).Url.Replace("{SearchText}", "текст");
或者最简单的方法就是通过字符串连接创建url:

string param = "текст";
string url = "/search/" + param;
我已经做了,但是在这种情况下,如果您更改了路由url,您需要在所有出现的地方更改代码,因此最好在一个地方创建一些静态函数,比如GetSearchUrl(string searchText)


它就像一个魔咒,Url看起来是人类可读的,我可以通过RouteData读取参数。值

最简单的解决方案是使用
UrlDecode
方法解码:

  string searchText = "текст";
  string url = Page.GetRouteUrl("RouteSearchSimple",
            new
            {
                SearchText = searchText
            });
  string decodedUrl = Server.UrlDecode(url); // => /search/текст

您的问题是“如何创建无效Url”?Uri的路径不能包含非ASCII字符-实际上,在所有浏览器中都可以,您指向一些8年前的文档您介意提供指向新文档的链接吗?你们可能在谈论“浏览器在地址中显示未编码的URL”,但我很高兴我错了,我看到的文档指定了如何在路径部分指定未编码的非ASCII文本。