首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Asp.net Web API -从actionfilter返回数据

Asp.net Web API -从actionfilter返回数据
EN

Stack Overflow用户
提问于 2013-06-26 18:25:47
回答 2查看 29.5K关注 0票数 20

我想从wep api actionfilter返回一个json对象。我如何才能做到这一点?

我可以从action返回对象,但在某些情况下我需要从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);
        }     


    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-26 18:40:45

您所需要做的就是分配响应:

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

此自定义操作筛选器将缩短操作的执行过程,并直接返回我们提供的响应。

票数 45
EN

Stack Overflow用户

发布于 2020-02-11 20:05:17

您可以使用HttpResponseMessage创建这样的响应

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
            };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17317541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档