如何阅读 API 在 ASP.NET 核心 MVC 中使用用户名和密码保护

How to read API secured with username and password in ASP.NET Core MVC

我有一个 API 受用户名和密码保护。我正在使用 ASP.NET 核心 MVC,但我正在使用 JavaScript 阅读 API。现在我的组织使用用户名和密码保护此 API,我想知道如何使用 C# 使用这些用户名和密码读取 API,因为它比 JavaScript 更安全。我可以在控制器中的 Post 请求中添加什么代码。如果你能指导我实现这一目标的方法。

我找到了这种方式,但 ASP.NET 不支持它 Core:

WebRequest req = WebRequest.Create(@"https://sub.domain.com/api/operations?param=value&param2=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&param2=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.

调用此操作