来自 Web API 中 post 请求的空负载,使用 JWT Bearer 身份验证

Null payload from post request in Web API with JWT Bearer authentication

我正在使用带有 JWT Bearer 身份验证的 Asp.NET Web API,当我没有通过不记名令牌。奇怪的是,当我设置不记名令牌时它工作正常。 它与我设置 JWT 身份验证的方式有关,还是我在这里缺少其他东西?

我正在使用的代码如下:

[RoutePrefix("api/accounts/OTP")]
[AllowAnonymous]
public class OTPController : BaseApiController
{
    [Route("Sample")]
    [HttpPost]
    public async Task<IHttpActionResult> Sample(SampleModel sampleModel)
    {
        return Ok();
    }
}

我的 BaseApiController class 是:

public class BaseApiController : ApiController
{
    private readonly CurrentRequest _currentRequest;
    public BaseApiController(CurrentRequest currentRequest)
    {
        _currentRequest = currentRequest;
        if (_currentRequest.Value == null)
            throw new ArgumentNullException("Request", "HttpRequestMessage is null");

        if (RequestContext.Principal.Identity.IsAuthenticated)
        {
            Thread.CurrentPrincipal = RequestContext.Principal;
            HttpContext.Current.User = RequestContext.Principal;
        }
    }
}

SampleModel class 是:

public class SampleModel
{
    public string code { get; set; }
}

解决了。

显然,在 post 主体到达控制器之前,我已经阅读了它的内容。

因为我正在使用 OWIN 身份验证,所以我正在为每个请求创建 OWIN 上下文 app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);,并且在这个 Create 方法中,我正在阅读内容 OwinRequestExtensions.GetBodyParameters(context.Request).Where(b => b.Key == "tenant")?.FirstOrDefault().Value; 当用户未通过身份验证时。已将其删除,现在可以使用了。