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

时间:2016-03-04 12:26:32

标签: c# asp.net httprequest

所以我需要做一些从c#到web api的请求,他们需要基本的身份验证。我知道我可以这样做:

AsyncTask

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

2 个答案:

答案 0 :(得分:0)

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

您可以创建一个添加Authorization标头的实用程序方法。

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";

P.S。我正在使用我的手机,对这个糟糕的答案感到抱歉。但我想这就是你需要的。

答案 1 :(得分:0)

您可以创建一个继承HttpClient的类,并且建议您从web.config获取UserName和Password

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);
}