Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取导致“0”的表单值;潜在危险的请求。从客户端检测到表单值;在MVC中?_C#_Asp.net Mvc_Error Handling_Request.form - Fatal编程技术网

C# 如何获取导致“0”的表单值;潜在危险的请求。从客户端检测到表单值;在MVC中?

C# 如何获取导致“0”的表单值;潜在危险的请求。从客户端检测到表单值;在MVC中?,c#,asp.net-mvc,error-handling,request.form,C#,Asp.net Mvc,Error Handling,Request.form,我有一个MVC3应用程序,它有一个自定义的HandleErrorAttribute,以便我可以通过电子邮件发送错误。我经常收到“潜在危险的请求。从客户端检测到表单值”,但它只显示导致异常的表单值的前几个字符。我希望看到输入的整个表单值,以便更好地了解输入是恶意的还是用户意外的。但是,当我尝试在HandleErrorAttribute中提取表单值时,它会抛出相同的错误!知道如何从Request.form中获取表单值而不在我的异常处理程序中进行验证吗 public class HandleError

我有一个MVC3应用程序,它有一个自定义的HandleErrorAttribute,以便我可以通过电子邮件发送错误。我经常收到“潜在危险的请求。从客户端检测到表单值”,但它只显示导致异常的表单值的前几个字符。我希望看到输入的整个表单值,以便更好地了解输入是恶意的还是用户意外的。但是,当我尝试在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
    }
}

在ASP.NET 4.5中,您将能够使用新的
HttpRequest.Unvalidated.Form
属性

在此之前,您可以使用反射来读取私有
HttpRequest.\u form
字段:

HttpRequest request = context.RequestContext.HttpContext.Request;
NameValueCollection form = (NameValueCollection)request.GetType().InvokeMember(
    "_form",
    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
    null, request, null);

请注意,
\u表单
是由
HttpRequest.form
属性延迟初始化的,因此请确保
HttpRequest.form
之前至少被访问过一次。

您可以使用
[ValidateInput(false)]
并自己验证它。它生成错误很好,我只是想知道是什么输入导致了它。我尝试将[ValidateInput(false)]添加到我的OneException方法中,但它仍然重新抛出错误。
ValidateInput
实际上对此不起作用,至少它本身不起作用。这里真正的问题是没有安全的方法来做这件事,这只会影响一个动作。这是一个影响整个应用程序的全局设置。直到最近才知道HttpRequest.Unvalidated.Form。谢谢