首页 > 解决方案 > 如何在 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&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;

标签: c#apiasp.net-core-mvc

解决方案


对于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 调用此操作。


推荐阅读