C# .NET Core 3.1-在控制器调用之间存储临时值

C# .NET Core 3.1-在控制器调用之间存储临时值,c#,asp.net-core,asp.net-web-api,C#,Asp.net Core,Asp.net Web Api,在授权方案中,我在.NET端的角度前端有两个入口点 在某个时候,我需要存储生成的标识符 我尝试使用HttpContext.Items,但从一个http调用到另一个http调用,它被丢弃 如何存储(并加密?)该值 我在网上找到的唯一代码是单向加密,我需要解密以重新使用它 // POST: api/requestAuthorization [HttpPost] [Route("requestAuthorization")] public async Task<Actio

在授权方案中,我在.NET端的角度前端有两个入口点

在某个时候,我需要存储生成的标识符

我尝试使用HttpContext.Items,但从一个http调用到另一个http调用,它被丢弃

  • 如何存储(并加密?)该值
我在网上找到的唯一代码是单向加密,我需要解密以重新使用它

// POST: api/requestAuthorization
[HttpPost]
[Route("requestAuthorization")]
public async Task<ActionResult<AuthorizeReturn>> RequestAuthorization(AuthorizeRequest authorizeRequest)
{
    string codeVerifier = GenerateCodeVerifier();

    httpContextAccessor.HttpContext.Items["codeVerifier"] = codeVerifier;
           
    string url = ...

    AuthorizeReturn authorizeReturn = new AuthorizeReturn();
    authorizeReturn.Url = url;
    return authorizeReturn;
}
//POST:api/requestAuthorization
[HttpPost]
[路由(“请求授权”)]
公共异步任务请求授权(AuthorizeRequest AuthorizeRequest)
{
字符串codeVerifier=GenerateCodeVerifier();
httpContextAccessor.HttpContext.Items[“codeVerifier”]=codeVerifier;
字符串url=。。。
AuthorizeReturn AuthorizeReturn=新建AuthorizeReturn();
authorizeReturn.Url=Url;
返回授权返回;
}
该代码验证器需要在以后的入口点中使用

// GET: api/EdenredConnect/authorize
[HttpGet]
[Route("authorize")]
public async Task<IActionResult> Authorize(...)
{
    string code_verifier = (string)httpContextAccessor.HttpContext.Items["codeVerifier"];

    ...

    return Ok();
}
//GET:api/EdenredConnect/authorize
[HttpGet]
[路线(“授权”)]
公共异步任务授权(…)
{
字符串代码\验证器=(字符串)httpContextAccessor.HttpContext.Items[“codeVerifier”];
...
返回Ok();
}

感谢控制器提供的帮助

只需返回代码就可以了,在前端,只需将代码存储在seesion storage中即可。然后,如果您使用的是axios,则可以使用拦截器函数,该函数被称为每个请求,如下所示:

导出常量Axios=Axios.create({ baseURL:'someURL', 标题:{ “内容类型”:“应用程序/json” }, }); Axios.interceptors.request.use((配置)=>{ config.headers.CodeVeryfier=`${sessionStorage.getItem('CodeVeryfier')}`; 返回配置; });
然后,在后端,您将能够从HttpContext访问codeveryfer

这是否回答了您的问题?您可以将数据放在标题中。。。加密和解密您需要自己实现(注意:将加密的字节转换为base64格式)。问题是,由于是第三方调用我的控制器,我无法返回标头,他们不会将其发送回Cookie/are/HTTP标头。。。。在标题下查找一个名为“Cookie”的文件。如果您需要在控制器之间共享,则建议在其中存储该值的共享服务。可能要将其添加为作用域。