首页 > 解决方案 > 如何在 ViewComponent 或库中向 nSwag 生成的客户端添加不记名令牌?

问题描述

我正在使用 nSwag 生成的客户端来调用需要传入不记名令牌的 API。

我已经将我的客户端设置为与此答案相同https://stackoverflow.com/a/49801655/3953989

我正在调用SetBearerToken()我的 BaseControllerOnActionExecuting()并从 cookie 中提取我存储的不记名令牌。

BaseController.cs

public class BaseController : Controller
{
    protected IApiClient ApiClient;

    public BaseController(IApiClient apiClient)
    {
        ApiClient = apiClient;
    }
    
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!string.IsNullOrWhiteSpace(CookieData?.Token))
        {
            ApiClient.SetBearerToken(CookieData.Token);
        }

        base.OnActionExecuting(context);
    }
}

我也为 DI 设置了 ApiClient

Startup.cs

services.AddHttpClient<IApiClient, ApiClient>(client =>
{
    client.BaseAddress = new Uri(appSettings.Value.ApiBaseUrl);
});

这适用于控制器,因为HttpContext在期间可用,OnActionExecuting()但 ViewComponents 没有等价物。

  1. 如何在 ViewComponent 中设置我的不记名令牌?
  2. 我也想知道我应该如何在我在控制器构造函数中创建的库中处理这个问题。

TestController.cs

public class TestController : BaseController
{
    private readonly IUserService _userService;

    public TestController(IApiClient apiClient) : base(apiClient)
    {
        var cookieData = HttpContext..... // HttpContext is null here
        apiClient.SetBearerToken(cookieData.Token)
    
        _userService = new UserService(apiClient);
    }
}

标签: c#asp.net-mvcdependency-injectionnswag

解决方案


推荐阅读