Asp.net Web API-从actionfilter返回数据
本文关键字:actionfilter 返回 数据 API- net Web Asp | 更新日期: 2023-09-27 18:19:52
我想从wep-api actionfilter返回一个json对象。我怎样才能做到这一点?
我可以从操作返回对象,但在某些条件下,我需要从操作过滤器返回一些数据。
提前谢谢。
编辑: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);
}
}
}
您只需要分配响应:
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";
}
这个自定义动作过滤器将缩短动作的执行时间,并直接返回我们提供的响应。
只要把这个扔出去,以防其他人像我一样来到这里,却找不到他们问题的答案:
你可能使用了错误的导入-你有两个选项:
System.Web.Http.Filters
System.Web.Mvc
(或System.Web.Http.Mvc
)
以下问题由Troy Dai提供:为什么我的ASP.NET Web API ActionFilterAttribute OnActionExecuting没有启动?
您可以使用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
};