WebAPI - Return 来自初始化(覆盖)方法的响应

WebAPI - Return Response from Initialize (override) method

我在每个 API 方法上都有相同的代码:

        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" });
        }

并希望 return 直接从覆盖 Initialize 方法响应。我可以做吗?

(当然,如果没有在Controller中设置用户变量,我已经把它移到了ActionFilter)

    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);
    }

Override Initialize 方法是无效方法,因此您无法 return 响应结果, 您应该写在响应上,但在 Initialize 方法中响应仍未完成。 see this link

您可以重新路由到您的方法,return 您的回复如下

 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);
    }