2013-06-26 97 views
8

我想從wep api actionfilter返回一個json對象。 我該如何做到這一點?Asp.net Web API - 從actionfilter返回數據

我可以從動作返回對象,但我需要在某些情況下從actionfilter返回一些數據。

在此先感謝。


編輯:1 當我改變了代碼像下文中,瀏覽器仍在加載沒有任何響應並在超時錯誤結束。

public class ValidationActionFilter : ActionFilterAttribute 
{ 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 


     var modelState = actionContext.ModelState; 
     if (!modelState.IsValid) 
     { 
      List<string> arr = new List<string>(); 
      foreach (var key in modelState.Keys) 
      { 
       var state = modelState[key]; 
       if (state.Errors.Any()) 
       { 
        string er = state.Errors.First().ErrorMessage; 
        if (!string.IsNullOrEmpty(er)) 
        { 
         arr.Add(er); 
        } 
       } 
      }    

      var output = new Result() { Status = Status.Error.ToString(), Data = null, Message = arr }; 
      actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, output, actionContext.ControllerContext.Configuration.Formatters.JsonFormatter); 
     }  


    } 
} 

回答

25

所有你需要的是分配的響應:

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

假設下面的控制器操作:

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

這個自定義操作的過濾器將動作的短路的執行和直接返回我們提供的迴應。

+0

感謝您的回覆。請參閱我的編輯。仍然存在問題 –

+0

如何在.net內核中執行此操作? –

+1

對於我來說,上述解決方案不起作用。行動中的代碼仍然執行。 –