为来自 web.config 文件的 http 请求配置身份验证

本文关键字:http 请求 配置 身份验证 文件 web config | 更新日期: 2023-09-27 18:37:18

所以我有一堆请求需要从 c# 到 web api 执行,它们需要基本的身份验证。我知道我可以做这样的事情:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://url");
        String username = "abc";
        String password = "123";
        String encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
        httpWebRequest.Headers.Add("Authorization", "Basic " + encoded);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

但我不想手动将凭据添加到每个请求的标头中。我想知道是否有一种方法可以全局验证我的所有请求(来自 web.config,也许类似于 sql 连接的 connectionString?

为来自 web.config 文件的 http 请求配置身份验证

您可以创建一个继承 HttpClient 的类,并按照您的建议从 web.config 获取用户名和密码

public class AuthenticatedClient : HttpClient
{
    public AuthenticatedClient()
    {
        string password = ConfigurationManager.AppSettings["Password"];
        string userName = ConfigurationManager.AppSettings["UserName"];
        string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(userName + ":" + password));
        BaseAddress = new Uri("http://url");
        DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
        DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    }
}

并在 web.config 中

<appSettings>
    <add key="UserName" value="abc" />
    <add key="Password" value="123" />
</appSettings>

然后,无论您想在哪里发出请求,都可以像标准HttpClient一样使用它

StringContent stringContent = new StringContent("json request string", UnicodeEncoding.UTF8, "application/json");
using (var client = new AuthenticatedClient())
{
   HttpResponseMessage response = await client.PostAsync("/api/whatever", stringContent);
}
如果您希望

您的凭据是静态的,但可以更改,那么您可以继续您的想法并将用户名和密码添加到 web.config 应用程序设置中。请参考这里

您可以创建添加授权标头的实用程序方法。

public static void AddAuthorizationHeader(ref HttpWebRequest request)
{
    string username = //load value from web.config
    string password = //load value from web.config
    string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
request.Headers.Add("Authorization", "Basic " + encoded);
}

因此,只需像这样将其用于需要该标头的所有http Web请求即可。

HttpWebRequest request = new HttpWebRequest();
UtilityClass.AddAuthorizationHeader(ref request);
request.ContentType = "application/json";
request.Method = "POST";

附言我正在使用我的手机,很抱歉这个糟糕的答案。但我想这就是你需要的。