Подтвердить что ты не робот

Asp.net Web API - возвращает данные из ActionFilter

Я хочу вернуть json-объект из action-фильтра app-app. Как я могу достичь этого?

Я могу вернуть объект из действия, но мне нужно возвратить некоторые данные из 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);
        }     


    }
}
4b9b3361

Ответ 1

Все, что вам нужно, это назначить ответ:

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

этот настраиваемый фильтр действий сократит время выполнения действия и сразу вернет ответ, который мы предоставили.

Ответ 2

Просто добавлю это на тот случай, если кто-нибудь еще придет, как я, и не найдет ответ на свою проблему:

Возможно, вы используете неправильный импорт - у вас есть 2 варианта:

  • System.Web.Http.Filters
  • System.Web.Mvc (или System.Web.Http.Mvc)

Предоставлено Troy Dai из этого вопроса: Почему мой ASP.NET Web API ActionFilterAttribute OnActionExecuting не запускается?