Asp.net Web API - return data from actionfilter

后端 未结 3 1153
猫巷女王i
猫巷女王i 2021-02-04 02:25

I want to return a json object from the wep api actionfilter. How can I achieve this?

I can return the object from action but I need to return some data from the actionf

相关标签:
3条回答
  • 2021-02-04 03:09

    All you need is to assign the Response:

    public class MyActionFilterAttribute: ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            actionContext.Response = actionContext.Request.CreateResponse(
                HttpStatusCode.OK, 
                new { foo = "bar" }, 
                actionContext.ControllerContext.Configuration.Formatters.JsonFormatter
            );
        }
    }
    

    Assuming the following controller action:

    [MyActionFilter]
    public string Get()
    {
        return "OK";
    }
    

    this custom action filter will short-circuit the execution of the action and directly return the response we provided.

    0 讨论(0)
  • 2021-02-04 03:21

    Just throwing this out there in case anyone else comes here like me and doesn't find an answer to their problem:

    You may be using the wrong import - You have 2 options:

    • System.Web.Http.Filters
    • System.Web.Mvc (or System.Web.Http.Mvc)

    Courtesy of Troy Dai from this question: Why is my ASP.NET Web API ActionFilterAttribute OnActionExecuting not firing?

    0 讨论(0)
  • 2021-02-04 03:23

    you can use HttpResponseMessage to create the response like that

    var output =  new Result() { Status = Status.Error.ToString(), Data = null, Message = arr };
    actionContext.Response = new HttpResponseMessage {
                    Content = new StringContent(JsonConvert.SerializeObject(output), Encoding.UTF8, "application/json"),
                    StatusCode = HttpStatusCode.OK
                };
    
    0 讨论(0)
提交回复
热议问题