Пользовательская авторизация Webapi 2 не выполняет метод - PullRequest
0 голосов
/ 08 июня 2018

Я создал собственный класс авторизации для проверки токена пользователя.Это web api 2.

Проблема в том, что пользовательская авторизация проверяет токен, но после этого не выполняет метод в контроллере.Он должен выполнить пользовательский метод в контроллере после проверки токена.Я отладил код и вижу, что токен авторизации проверен правильно, но не выполняется метод, а просто возвращается 200.

Кто-нибудь может помочь?(Я новичок в этом)

код класса пользовательской авторизации:

public class CustomAuthorize : System.Web.Http.AuthorizeAttribute
    {
        public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            base.OnAuthorization(actionContext);


            if (actionContext.Request.Headers.Authorization.Parameter != null)
            {
                string authenticationToken = Convert.ToString(actionContext.Request.Headers.Authorization.Parameter);
                PartnerUserProfile user = new PartnerUserProfile();
                user = user.validate_token(authenticationToken);

                if (user.recordref > 0) //above user has some content and matches the token from validate_token method. it wil be blank if not
                {


                    return;

                }
                else
                {
                    HttpContext.Current.Response.AddHeader("Bearer", authenticationToken);
                    HttpContext.Current.Response.AddHeader("AuthenticationStatus", "NotAuthorized");
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
                    return;
                }
            }

            actionContext.Response =  actionContext.Request.CreateResponse(HttpStatusCode.ExpectationFailed);
            actionContext.Response.ReasonPhrase = "Please provide valid inputs";
            return;

        }

    }

и мой контроллер ниже этого уровня никогда не будет выполнен.

   [HttpPost]
    [CustomAuthorize]
    public IHttpActionResult user(PartnerUserProfile user) //setUser
    {
        ReturnData rd = user.setPartnerUserProfile();
        if (rd.status == 0)
        {
            return BadRequest("Invalid");
        }
        return Ok(rd);
    }

1 Ответ

0 голосов
/ 08 июня 2018

Когда вы присваиваете значение Response, оно замыкается и сразу возвращается.Логика контроллера будет выполняться только в том случае, если вы не закорачиваете (ответ задается в Filter).

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.1#cancellation-and-short-circuiting

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