Нулевая полезная нагрузка из почтового запроса в Web API с аутентификацией JWT Bearer - PullRequest
0 голосов
/ 25 октября 2018

Я использую Asp.NET Web API с аутентификацией JWT Bearer, а параметр sampleModel в методе Sample по какой-то причине показывает нулевое значение, когда я не передаю токен носителя.Странно то, что когда я устанавливаю токен на предъявителя, он работает нормально.Это как-то связано с тем, как я настроил мою аутентификацию 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; }
}

1 Ответ

0 голосов
/ 25 октября 2018

Решено.

По-видимому, я читал содержимое тела сообщения еще до того, как оно дошло до контроллера.

Поскольку я использую аутентификацию OWIN, я создаю контекст OWIN для запроса app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);, и в этом методе Create я считывал содержимое OwinRequestExtensions.GetBodyParameters(context.Request).Where(b => b.Key == "tenant")?.FirstOrDefault().Value;, когда пользователь не проходил аутентификацию.Убрал его и теперь он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...