c# - 如何在 ASP.NET Core MVC 中读取使用用户名和密码保护的 API
问题描述
我有一个使用用户名和密码保护的 API。我正在使用 ASP.NET Core MVC,但我正在使用 JavaScript 读取 API。现在我的组织使用用户名和密码保护了这个 API,我想知道如何使用 C# 读取这些用户名和密码的 API,因为它比 JavaScript 更安全。我可以在控制器的 Post 请求中添加什么代码。如果你能指导我找到实现这一目标的方法。
我找到了这种方式,但 ASP.NET Core 不支持它:
WebRequest req = WebRequest.Create(@"https://sub.domain.com/api/operations?param=value¶m2=value");
req.Method = "GET";
req.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(Encoding.Default.GetBytes("username:password"));
//req.Credentials = new NetworkCredential("username", "password");
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
解决方案
对于net core,最好使用http客户端
using (var client = new HttpClient())
{
var baseAddress = "https://sub.domain.com";
var api = "/api/operations?param=value¶m2=value";
client.BaseAddress = new Uri(baseAddress);
var contentType = new MediaTypeWithQualityHeaderValue("application/json");
client.DefaultRequestHeaders.Accept.Add(contentType);
var authenticationString = $"{username}:{password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(authenticationString));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64EncodedAuthenticationString);
var response = await client.GetAsync(api);
var statusCode = response.StatusCode.ToString();
if (response.IsSuccessStatusCode)
{
var stringData = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<object>(stringData);
}
}
更新
如果您不使用 http 客户端但也使用 ajax,只需使用上面的代码创建一个操作并从 ajax 调用此操作。
推荐阅读
- python - 如何将新记录添加到多对多字段
- javascript - 未捕获的 TypeError:动态加载 A-Frame 时系统 [e] 不是构造函数
- php - 如何在 Windows 7 的 XAMPP 上运行的 PHP 应用程序中启用 SSL?
- javascript - 对基于另一个数组的数组进行排序,并用 0 或空字符串 javascript 替换不匹配的数据
- dart - 飞镖:什么
在函数名之后 - tomcat - 如何在 Jakarta / Java EE 中连续运行一个进程(没有网站请求)?
- haskell - 如何在haskell中仅导入特定实例
- azure-devops - 从 REST API 传递到构建管道 yml 的变量未正确获取
- plot - 带有gnuplot的奇怪图
- amazon-web-services - 有没有办法直接从我的 React 前端调用 API Gateway