我在类库中使用此方法并从控制器调用该方法。但我传递的价值不是编码。我无法追查其背后的原因。
班级图书馆
using System.Web;
public static class CommonLogic
{
public static string UrlEncode(string value)
{
return HttpUtility.UrlEncode(value);
}
}
控制器
var test = CommonLogic.UrlEncode("2")
测试值为“2”且未编码。
更新
我刚才从下面的评论中意识到了这个原因。我真正需要的不是编码而是加密和解密。我不希望Url参数作为纯文本公开,而我希望它是加密值,稍后在控制器中我将在处理该值之前再次解密它。有什么想法?
答案 0 :(得分:0)
“2”不需要是UrlEncoded。它不是Urls中的保留符号。尝试测试一个字符串,例如“<”。
答案 1 :(得分:0)
字符“2”是RFC3986 https://tools.ietf.org/html/rfc3986#section-2.3
中定义的“未保留”集的一部分“无保留”不需要进行百分比编码。
关于您在网址中公开它的评论:编码是不是加密。如果您不希望在URL中公开整数用户ID,则可能需要为用户提供另一个可以公开的唯一标识符。例如,用户表中的唯一随机字符串(类似于youtube.com标识视频的方式)或GUID。
如何使用RijndaelManaged在C#中进行简单的对称加密: Simple insecure two-way "obfuscation" for C#
确保密码保密。
答案 2 :(得分:0)
UrlEncode方法的目的是将字符串转换为可在URL中使用的格式。 “2”已经可以在URL中使用,因此这是一个空值转换,它将导致相同的值“2”。
Section 2 of RFC 3986概述了必须编码哪些字符才能成为网址的一部分。