【发布时间】:2019-05-27 20:08:03
【问题描述】:
我正在使用 ModelValidationFilter 来处理我所有的 post 或 put 请求的模型验证错误。我正在使用 IAsyncPageFilter 并注册为全局过滤器。在 OnPageHandlerExecutionAsync 方法中,我能够处理 ajax 请求的验证错误并发回 json 响应。但是对于非ajax请求,
var result = (PageResult)context.Result;
请问您能帮我解决这个问题吗?
我正在实现这一点,因此我不需要在所有帖子中编写模型验证或将处理程序放在我的应用程序的任何剃须刀页面中。
这是我的实现:
if (context.HttpContext.Request.Method.Equals("POST") || context.HttpContext.Request.Method.Equals("PUT"))
{
if (!context.ModelState.IsValid)
{
if (context.HttpContext.Request.IsAjaxRequest())
{
var errorModel = context.ModelState.Keys.Where(x => context.ModelState[x].Errors.Count > 0)
.Select(x => new
{
key = x,
errors = context.ModelState[x].Errors.Select(y => y.ErrorMessage).ToArray()
});
context.Result = new JsonResult(new AjaxResultHelper<IEnumerable<object>>
{
Response = errorModel,
Message = "_InvalidData_"
});
}
else
{
var result = (PageResult)context.Result;
context.Result = new PageResult
{
ViewData = result.ViewData,
ContentType = result.ContentType,
StatusCode = 400,
};
}
}
}
else
{
await next.Invoke();
}
【问题讨论】:
-
你应该可以做到
context.Result = new PageResult();。 -
@KirkLarkin: 需要传递给
PageResult的ViewData和ContentType怎么样
标签: c# asp.net-core razor-pages