gpt4 book ai didi

c# - ASP.NET MVC 处理区域中的请求验证异常

转载 作者:太空狗 更新时间:2023-10-29 23:50:33 28 4
gpt4 key购买 nike

我有一个自定义过滤器,多年来一直用于以更加用户友好的方式处理 RequestValidationException。它在所有情况下都可以正常工作直到我引入一个区域:

public class HandleHttpRequestValidationExceptionAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
//base.OnException(filterContext);

if (!(filterContext.Exception is HttpRequestValidationException))
return;

const string viewName = "~/Views/Errors/HttpRequestValidationException.cshtml";

var result = new ViewResult
{
ViewName = viewName,
ViewData = { Model = filterContext.Exception.Message }
};

//result.ViewBag.StatusCode = 200;

filterContext.Result = result;
filterContext.RouteData.Values["area"] = "";
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 200;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
filterContext.HttpContext.Server.ClearError();
}
}

...在 FilterConfig 中注册:

public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
filters.Add(new HandleMemberIsNotActivatedOrWaiveredAttribute());
filters.Add(new HandleMemberNotAuthorizedException());
filters.Add(new HandleHttpRequestValidationExceptionAttribute());
}
}

任何抛出的 RequestValidationException 都可以毫无问题地得到处理(我得到了漂亮的错误页面,其中包含一些用户友好的描述,说明发生了什么以及如何处理)除非抛出一个异常面积。在那种情况下,我会得到一个空白响应,其中包含 customErrors="On"(如果 customErrrors="Off",则会得到详细的 YSOD)。如果我移除我的过滤器,那么我会得到无细节的 YSOD(这也毫无意义)。无论哪种方式,Global.asax.cs 中的 Application_Error 都不会被触发。此外,无论从何处抛出异常,我所有其他自定义过滤器和全局异常处理都可以正常工作。

如何以用户友好的方式处理 RequestValidationException 而不管异常源自何处(无论它是否从 Area 内抛出)?

更新:即使执行 filterContext.Result = new RedirectResult("/"); 也会导致相同的空白页面(单步执行它表明一切正常,但没有正确的响应)。

最佳答案

我相信您将需要将错误模型从该区域转发到您的错误 Controller 以生成 View 。否则您将不得不将错误 Controller 路由到该区域。

查看此链接。 Redirect From Action Filter Attribute

关于c# - ASP.NET MVC 处理区域中的请求验证异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31068651/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com