如何解决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 举报,一经查实,本站将立刻删除。