3

I have the same code on each API method:

        if (user.AspNetRoles.Where(p => p.Name == Models.Roles.SmartphonePhotographer).Count() == 0)
        {
            return Request.CreateResponse((HttpStatusCode)453, new { Message = "User does not have Smartphone Photographer role" });
            //return Request.CreateErrorResponse(HttpStatusCode.NotFound, "User does not have Smartphone Photographer role");
        }

        if (!user.EmailConfirmed)
        {
            return Request.CreateResponse((HttpStatusCode)454, new { Message = "User is not confirmed" });
        }

and want to return Response directly from override Initialize method. Can I do it?

(Of course, I have moved it to ActionFilter if had not set user variable in Controller)

    protected override void Initialize(HttpControllerContext controllerContext)
    {
        int id = controllerContext.RequestContext.Principal.Identity.GetUserId<int>();
        user = controllerContext.Request.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(id);

        base.Initialize(controllerContext);
    }
Oleg Sh
  • 8,496
  • 17
  • 89
  • 159

1 Answers1

1

Override Initialize method is a void method so you can't return response result, You should write on the response but in the Initialize method the response still not completed yet. see this link

You can reroute to your method which return your response like the below

 protected override void Initialize(HttpControllerContext controllerContext)
    {
        var  newControllerContext = controllerContext
            //edit RouteData to refer to your controller/action
        newControllerContext.RouteData.Values["action"] = "YourAction"
        base.Initialize(newControllerContext);
    }
Osama AbuSitta
  • 3,918
  • 4
  • 35
  • 51