2013-06-26 9 views
8

wep api actionfilterからjsonオブジェクトを返したいとします。 これをどうすれば実現できますか?Asp.net Web API - actionfilterからデータを返します

アクションからオブジェクトを返すことができますが、何らかの条件でアクションフィルタからデータを返す必要があります。

ありがとうございます。


編集:1 Iブラウザはまだ任意の応答なしでロードし、タイムアウトエラーで終了し、次のようなコードを変更しました。以下のコントローラのアクションを想定し

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

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

必要なのは、レスポンスを割り当てることです

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

このカスタムアクションフィルタするアクションのショート実行し、私たちが提供した回答を直接返します。

+0

ご返信ありがとうございます。私の編集を見てください。まだ問題があります –

+0

.netコアでこれを行うにはどうしたらいいですか? –

+1

私の場合、上記の解決策は機能しませんでした。アクション内のコードはまだ実行されていました。 –

関連する問題