来自 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;
当用户未通过身份验证时。已将其删除,现在可以使用了。
我正在使用带有 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;
当用户未通过身份验证时。已将其删除,现在可以使用了。