你可以做两件事。
首先,您可以在数据库上创建一个额外的增量 ID,无论是在 ASP.NET 表上还是在新的映射表上,并提供一个连接到 Guid 的较小数字。为什么要小一些?因为 Guid 是 128 位,并且太大而无法在 url 上使用。
然后,您可以在 url 上使用这个与 Guid 相连的较小数字。这里唯一的漏洞利用问题是任何人都可以找到您的所有用户列表。所以有这个公开所以如果你也公开它们不是问题。所以使用他们的 URL 中的数字来查找用户,用户名是为了更好的 SEO。号码保持不变,但名称可以更改,因此仅使用号码来定位用户。
第二种解决方案是将 128 位 Guid 编号压缩和编码为 73 个基本字符串。我选择了 73 个基本字符,因为 73 是 url 上允许的非转义字符。
以下是我找到的一些用于进行此转换的示例:
http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx
http://jopinblog.wordpress.com/2009/02/04/a-shorter-friendlier-guiduuid-in-net/
http://buildmaestro.wordpress.com/2011/04/27/installscript-to-transform-guid-into-compressed-guid/
一个简单的转换为 base64(来自Dave Transoms)
public static string Encode(Guid guid)
{
string encoded = Convert.ToBase64String(guid.ToByteArray());
encoded = encoded
.Replace("/", "_")
.Replace("+", "-");
return encoded.Substring(0, 22);
}
public static Guid Decode(string value)
{
value = value
.Replace("_", "/")
.Replace("-", "+");
byte[] buffer = Convert.FromBase64String(value + "==");
return new Guid(buffer);
}