C# 如何将url转换为文件名?

C# 如何将url转换为文件名?,c#,.net,url,converter,filenames,C#,.net,Url,Converter,Filenames,我想将aribtrary url(包括路径和查询部分)转换为有效的文件名。我选择使用Base64,如下所示 是否有更好的Base64代码,例如避免使用字节[]?url到文件名的最佳实践是什么?我想有一个超过文件名长度限制的问题 string encoded = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(url)); string decoded = System.Text.Encoding.U

我想将aribtrary url(包括路径和查询部分)转换为有效的文件名。我选择使用
Base64
,如下所示

是否有更好的Base64代码,例如避免使用
字节[]
?url到文件名的最佳实践是什么?我想有一个超过文件名长度限制的问题

string encoded = 
   System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(url));
string decoded = 
   System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(encoded));

if (decoded != url)
    throw(new SomeException());

我想说的是,最好的做法是,如果可能的话,文件名不应该与URL有直接关系。除非您控制调用此方法的URL,否则您将面临安全隐患。最好是生成一些本地ID,将其用作文件名,然后将该ID链接到URL。这样,您就可以完全控制正在编写的文件名,而使用URL会让您面临潜在的攻击者。

我想说的是,最好的做法是,如果可能,文件名不应该与URL有直接关系。除非您控制调用此方法的URL,否则您将面临安全隐患。最好是生成一些本地ID,将其用作文件名,然后将该ID链接到URL。这样,您就可以完全控制正在编写的文件名,而使用URL会让您面临潜在的攻击者。

我想说的是,最好的做法是,如果可能,文件名不应该与URL有直接关系。除非您控制调用此方法的URL,否则您将面临安全隐患。最好是生成一些本地ID,将其用作文件名,然后将该ID链接到URL。这样,您就可以完全控制正在编写的文件名,而使用URL会让您面临潜在的攻击者。

我想说的是,最好的做法是,如果可能,文件名不应该与URL有直接关系。除非您控制调用此方法的URL,否则您将面临安全隐患。最好是生成一些本地ID,将其用作文件名,然后将该ID链接到URL。这样,您就可以完全控制正在写入的文件名,而使用URL会让您面临潜在的攻击者。

如果/当您需要将名称转换回原始URL时,您可能需要创建一个单独的映射表。生成一个唯一的文件名,并将其存储在表中,旁边是原始Url。您可以使用API(Guid、Random、DateTime)或简单的计数器来获取唯一的文件名

这种方式不必担心重复和非法字符,因为您可以控制文件名的生成

在缓存JSON请求/响应时,请注意帖子:两个请求的URL可能相同,但内容可能不同,因此您可能不希望在第一个请求中使用缓存,在下一个请求中使用缓存


一般来说,您不会缓存POST,但一些REST API使用POST绕过最大Url GET请求长度。

如果/当您需要将名称转换回原始Url时,您可能需要创建一个单独的映射表。生成一个唯一的文件名,并将其存储在表中,旁边是原始Url。您可以使用API(Guid、Random、DateTime)或简单的计数器来获取唯一的文件名

这种方式不必担心重复和非法字符,因为您可以控制文件名的生成

在缓存JSON请求/响应时,请注意帖子:两个请求的URL可能相同,但内容可能不同,因此您可能不希望在第一个请求中使用缓存,在下一个请求中使用缓存


一般来说,您不会缓存POST,但一些REST API使用POST绕过最大Url GET请求长度。

如果/当您需要将名称转换回原始Url时,您可能需要创建一个单独的映射表。生成一个唯一的文件名,并将其存储在表中,旁边是原始Url。您可以使用API(Guid、Random、DateTime)或简单的计数器来获取唯一的文件名

这种方式不必担心重复和非法字符,因为您可以控制文件名的生成

在缓存JSON请求/响应时,请注意帖子:两个请求的URL可能相同,但内容可能不同,因此您可能不希望在第一个请求中使用缓存,在下一个请求中使用缓存


一般来说,您不会缓存POST,但一些REST API使用POST绕过最大Url GET请求长度。

如果/当您需要将名称转换回原始Url时,您可能需要创建一个单独的映射表。生成一个唯一的文件名,并将其存储在表中,旁边是原始Url。您可以使用API(Guid、Random、DateTime)或简单的计数器来获取唯一的文件名

这种方式不必担心重复和非法字符,因为您可以控制文件名的生成

在缓存JSON请求/响应时,请注意帖子:两个请求的URL可能相同,但内容可能不同,因此您可能不希望在第一个请求中使用缓存,在下一个请求中使用缓存


一般来说,您不会缓存POST,但一些REST API使用POST来绕过最大Url GET请求长度。

您预计会有什么安全隐患?我假设转换将阻止文件被称为
“../../../../windows/[…]”
,并且我看不到太多的安全问题。我确实使用过像
wget
这样的实用程序,它可以将网页下载到镜像url的文件夹结构中,并且没有听说过与此相关的任何安全问题…@Erik,我确实控制url。@Chris,从长远来看,是的,我确实希望代码能够像wget那样工作。代码?@BSalita如果你控制了URL,我想这是一个方便的方法