Aus*_*tin 5 c# error-handling asp.net-mvc request.form
我有一个MVC3应用程序,它有一个自定义HandleErrorAttribute,以便我可以通过电子邮件发送错误.我经常得到"从客户端检测到一个有潜在危险的Request.Form值",但它只显示导致异常的表单值的前几个字符.我希望看到输入的整个表单值,以便在输入是恶意的或用户意外时更好地了解.但是,当我尝试在HandleErrorAttribute中提取表单值时,它会抛出相同的错误!任何想法如何从Request.Form获取表单值而不导致我的异常处理程序中的验证?
public class HandleErrorLogAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
//Record Error
string errorDetails = HttpUtility.HtmlEncode(context.Exception.ToString());
// Throws "otentially dangerous..." error here
foreach (var key in context.RequestContext.HttpContext.Request.Form.AllKeys)
{
errorDetails += key + "=" + HttpUtility.HtmlEncode(context.RequestContext.HttpContext.Request.Form[key]);
}
// Send Email with errorDetails
}
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*Liu 12
在ASP.NET 4.5中,您将能够使用新HttpRequest.Unvalidated.Form属性.
在此之前,您可以使用反射来读取私有HttpRequest._form字段:
HttpRequest request = context.RequestContext.HttpContext.Request;
NameValueCollection form = (NameValueCollection)request.GetType().InvokeMember(
"_form",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, request, null);
Run Code Online (Sandbox Code Playgroud)
请注意,_form该HttpRequest.Form属性已懒惰地初始化,因此请确保HttpRequest.Form至少已事先访问过一次.
| 归档时间: |
|
| 查看次数: |
2969 次 |
| 最近记录: |