我想要编码以下aspx链接:
Response.Redirect("countriesAttractions.aspx?=");
我尝试过以下方法:
Response.Redirect(Encoder.UrlPathEncode("countriesAttractions.aspx?="));
这是我尝试的另一种方法:
var encoded = Uri.EscapeUriString("countriesAttractions.aspx?=");
Response.Redirect(encoded);
两者都重定向到没有编码URL的页面:
http://localhost:52595/countriesAttractions?=
我尝试了第三种方法:
Response.Redirect(Server.UrlEncode("countriesAttractions.aspx?="));
这次url本身被编码:
http://localhost:52595/countriesAttractions.aspx%3F%3D
但是我从用户界面中收到错误说:
HTTP Error 404.0 Not Found
The resource you are looking for has been removed, had its name changed, or
is temporarily unavailable.
Most likely causes:
-The directory or file specified does not exist on the Web server.
-The URL contains a typographical error.
-A custom filter or module, such as URLScan, restricts access to the file.
另外,我想编码另一种涉及解析会话字符串的URL:
Response.Redirect("specificServices.aspx?service=" +
Session["service"].ToString().Trim() + "&price=" +
Session["price"].ToString().Trim()));
我尝试将编码方法包含在上面的代码中的方法:
Response.Redirect(Server.UrlEncode("specificServices.aspx?service=" +
Session["service"].ToString().Trim() + "&price=" +
Session["price"].ToString().Trim()));
我使用的上述编码方法显示了与之前的服务器URL编码方法相同的结果。我不确定如何在不出错的情况下以正确的方式编码url。
以及使用CommandArgument编码URL:
Response.Redirect("specificAttractions.aspx?attraction=" +
e.CommandArgument);
我尝试过以下编码:
Response.Redirect("specificAttractions.aspx?attraction=" +
HttpUtility.HtmlEncode(Convert.ToString(e.CommandArgument)));
但它没有用。
有没有办法在不收到此类错误的情况下对网址进行编码? 我希望输出类似于我的第二个结果,但我想看到页面本身,而不是错误页面。
我已尝试过在stackoverflow上找到的其他方法,例如自编码方法,但这些方法也不起作用。 我在这种情况下使用AntiXSS类库用于我尝试的方法,因此如果我可以使用AntiXSS库获得解决方案将会很棒。 我需要将URL编码为我学校项目的一部分,所以如果我能得到解决方案那就太棒了。谢谢。
答案 0 :(得分:0)
您可以使用HttpUtility类中的UrlEncode
或UrlPathEncode
方法来实现您的需求。请参阅https://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode(v=vs.110).aspx
然而,理解您不需要对整个URL字符串进行编码是很重要的。它只是参数值 - 可能包含您需要编码的任意数据和在URL中无效的字符。
要解释此概念,请在简单的.NET控制台应用程序中运行以下命令:
string url = "https://www.google.co.uk/search?q=";
//string url = "http://localhost:52595/specificAttractions.aspx?country=";
string parm = "Bora Bora, French Polynesia";
Console.WriteLine(url + parm);
Console.WriteLine(url + HttpUtility.UrlEncode(parm), System.Text.Encoding.UTF8);
Console.WriteLine(url + HttpUtility.UrlPathEncode(parm), System.Text.Encoding.UTF8);
Console.WriteLine(HttpUtility.UrlEncode(url + parm), System.Text.Encoding.UTF8);
您将获得以下输出:
https://www.google.co.uk/search?q=Bora Bora, French Polynesia
https://www.google.co.uk/search?q=Bora+Bora%2c+French+Polynesia
https://www.google.co.uk/search?q=Bora%20Bora,%20French%20Polynesia
https%3a%2f%2fwww.google.co.uk%2fsearch%3fq%3dBora+Bora%2c+French+Polynesia
通过将这些内容粘贴到浏览器中并尝试使用它们,您很快就会看到什么是有效的网址,什么不是。
(注意当粘贴到现代浏览器中时,如果您的参数无效,其中许多会自动为您进行URL编码 - 因此您也会发现第一个输出也有效,但如果您尝试通过例如,一些C#代码,它会失败。)
工作演示:https://dotnetfiddle.net/gqFsdK
您当然可以将输入的值更改为您喜欢的任何值。它们可以是硬编码的字符串,也可以是返回字符串的其他代码的结果(例如,从会话,数据库,UI元素或其他任何地方获取)。
N.B。澄清有效 URL只是URL格式正确的字符串也很有用。它与实际存在的网址不同。如果您尝试使用URL,或者可能有效且确实存在,则URL可能有效但不存在。