我有一个应用程序,发送一个POST请求到VB论坛软件,并登录某人(没有设置cookie或任何东西)。

一旦用户登录,我就创建一个变量,在他们的本地机器上创建一个路径。

c: \用户tempfolder枣\

问题是一些用户名抛出“非法字符”异常。例如,如果我的用户名是mas|fenix,它会抛出一个异常。

Path.Combine( _      
  Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData), _
  DateTime.Now.ToString("ddMMyyhhmm") + "-" + form1.username)

我不想从字符串中删除它,但是通过FTP在服务器上创建了一个具有其用户名的文件夹。这就引出了我的第二个问题。如果我在服务器上创建一个文件夹,我可以留下“非法字符”吗?我问这个问题是因为服务器是基于Linux的,我不确定Linux是否接受它。

编辑:似乎URL编码不是我想要的..这就是我想做的:

old username = mas|fenix
new username = mas%xxfenix

其中%xx是ASCII值或任何其他容易识别字符的值。


当前回答

对于。net核心用户,使用这个

Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(Uri uri)

其他回答

如果你看不见系统。Web,更改项目设置。目标框架应该是。NET Framework 4“代替”。NET Framework 4客户端配置文件

对于。net核心用户,使用这个

Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(Uri uri)

除了@丹·赫伯特的回答, 我们应该对一般的值进行编码。

Split有参数Split('&','=');表达式首先被&分割,然后是'=',因此奇数元素都是要编码的值,如下所示。

public static void EncodeQueryString(ref string queryString)
{
    var array=queryString.Split('&','=');
    for (int i = 0; i < array.Length; i++) {
        string part=array[i];
        if(i%2==1)
        {               
            part=System.Web.HttpUtility.UrlEncode(array[i]);
            queryString=queryString.Replace(array[i],part);
        }
    }
}

我写了一个对所有符号进行url编码的c#方法:

    /// <summary>
    /// !#$345Hf} → %21%23%24%33%34%35%48%66%7D
    /// </summary>
    public static string UrlEncodeExtended( string value )
    {
        char[] chars = value.ToCharArray();
        StringBuilder encodedValue = new StringBuilder();
        foreach (char c in chars)
        {
            encodedValue.Append( "%" + ( (int)c ).ToString( "X2" ) );
        }
        return encodedValue.ToString();
    }

Url编码在。net中很容易。使用:

System.Web.HttpUtility.UrlEncode(string url)

如果要对其进行解码以获得文件夹名称,则仍然需要排除文件夹名称中不能使用的字符(*、?、/等)。