我正在使用具有JWT承载身份验证的Asp.NET Web API,并且由于某些原因,当我不传递承载令牌时,sampleModel
方法中的Sample
参数显示为null。奇怪的是,当我设置不记名令牌时,它可以正常工作。
这与我设置JWT身份验证有什么关系吗,还是我在这里遗漏了其他东西?
我正在使用的代码如下:
[RoutePrefix("api/accounts/OTP")]
[AllowAnonymous]
public class OTPController : BaseApiController
{
[Route("Sample")]
[HttpPost]
public async Task<IHttpActionResult> Sample(SampleModel sampleModel)
{
return Ok();
}
}
我的BaseApiController类是:
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类为:
public class SampleModel
{
public string code { get; set; }
}
答案 0 :(得分:0)
解决了。
很显然,我正在阅读帖子正文,甚至还没有到达控制器。
当我使用OWIN身份验证时,我正在根据每个请求app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
创建OWIN上下文,在此Create
方法中,我通过以下方式读取内容
OwinRequestExtensions.GetBodyParameters(context.Request).Where(b => b.Key == "tenant")?.FirstOrDefault().Value;
,当用户未通过身份验证时。删除了它,现在可以正常工作。