所以我需要做一些从c#到web api的请求,他们需要基本的身份验证。我知道我可以这样做:
AsyncTask
但我不想手动将凭据添加到每个请求的标头中。我想知道是否有一种方法可以全局验证我的所有请求(来自web.config,也许类似于sql连接的connectionStrings?)。
答案 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);
}