微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.Net MVC- 在一个动作中接收身份验证令牌想在另一个动作中使用

如何解决ASP.Net MVC- 在一个动作中接收身份验证令牌想在另一个动作中使用

我有一个登录页面,可以访问外部 API 并接收身份验证令牌。我使用

设置此身份验证令牌
ApiHelper.apiclient.DefaultRequestHeaders.Add("Authorization",$"bearer {access_token}");

然后我重定向一个操作(用户填写表单的地方)。然后我需要使用身份验证令牌将表单数据发送回同一个 API。但是,我收到 401 Unauthorized,给人的印象是不再随请求发送身份验证令牌。

如何设置身份验证令牌,以便在设置后可用于所有进一步的 API 请求?

当前代码如下:

[HttpPost]
public async Task<ActionResult> Index(LoginModel loginDetails)
{
        ApiHelper.InitializeClient();

        var xmlString = $"<?xml version='1.0' encoding='utf-8'?><RequestToken xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><grant_type>bearer</grant_type><username>{loginDetails.Username}</username><password>{loginDetails.Password}</password></RequestToken>";

        var stringContent = new StringContent(xmlString,Encoding.UTF8,"application/xml");
      
        using (HttpResponseMessage response = await ApiHelper.apiclient.PostAsync("--Gets auth token URL--",stringContent))
        {
            if (response.IsSuccessstatusCode)
            {
                var stream = await response.Content.ReadAsstreamAsync();

                var xmlDocument = new XmlDocument();
                xmlDocument.Load(stream);

                XElement incomingXml = XElement.Parse(xmlDocument.InnerXml);
                var access_token = incomingXml.Element("access_token").Value;

                ApiHelper.apiclient.DefaultRequestHeaders.Add("Authorization",$"bearer {access_token}");

                return RedirectToAction("Create");
            }
        }

        return View();
}

[HttpPost]
public async Task<ActionResult> Create(ShipmentModel shipmentModel)
{
    ApiHelper.InitializeClient();
          
    var xmlString = "--XML Data--";

    var stringContent = new StringContent(xmlString,"application/xml");

    using (HttpResponseMessage response = await ApiHelper.apiclient.PostAsync("--API URL--",stringContent))
    {
        if (response.IsSuccessstatusCode) --Currently 401 Unauthorized--
        {
            var stream = await response.Content.ReadAsstreamAsync();

            var xmlDocument = new XmlDocument();
            xmlDocument.Load(stream);
                
            XElement incomingXml = XElement.Parse(xmlDocument.InnerXml);

            return RedirectToAction("Create");
        }
    }

    return RedirectToAction("Index");
}

public static class ApiHelper
{
    public static HttpClient apiclient { get; set; }

    public static void InitializeClient()
    {
        apiclient = new HttpClient();
            
        apiclient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));
        apiclient.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
        apiclient.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("deflate"));
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。