Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebAPI - Return Response from Initialize (override) method

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);
    }
like image 268
Oleg Sh Avatar asked Dec 05 '25 09:12

Oleg Sh


1 Answers

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);
    }
like image 78
Osama AbuSitta Avatar answered Dec 06 '25 21:12

Osama AbuSitta