将凭证添加到URL字符串的正确方法?

时间:2016-07-17 04:49:34

标签: c#

简单的问题。我有一个URL,我需要添加用户名和密码才能输入凭据。

我想知道C#中是否有一个方法可以接收URL字符串和凭据,并返回带有凭据的URL。我想完成我对此函数的操作,但此函数正在读取特定的字符串,最终可能会导致错误: (它只是添加用户名和凭据)

url = url.Substring(0, url.IndexOf("/") + 2) + userName + ":" + password + "@" + url.Substring(url.IndexOf("/") + 2);

这种做法非常静态......我需要获取URL的最终字符串。

2 个答案:

答案 0 :(得分:7)

使用UriBuilder

var uri = new Uri("http://www.example.org");
var uriWithCred = new UriBuilder(uri) { UserName = "u", Password = "p" }.Uri;

生成:

http://u:p@www.example.org/

答案 1 :(得分:0)

使用上述答案,以处理@,#、:等字符,您需要对该URL编码用户和密码:

  public static string CreateProtectedURL(string url, string username, string password)
    {
       
        var uri_protected= (new UriBuilder( new Uri(url)) { UserName = HttpUtility.UrlEncode(username), Password = HttpUtility.UrlEncode(password) }.Uri);

        return uri_protected.AbsoluteUri.ToString(); //will work in browser

       // return HttpUtility.UrlDecode(uri_protected.AbsoluteUri); //will not work in browser, you will get the normal url with user and pass 
    }