从客户端将数据和文件发布到 Web api 中检测到潜在危险的 Request.Form 值

Posted

技术标签:

【中文标题】从客户端将数据和文件发布到 Web api 中检测到潜在危险的 Request.Form 值【英文标题】:A potentially dangerous Request.Form value was detected from the client posting data and file to a web api 【发布时间】:2018-11-02 04:12:11 【问题描述】:

我有一个表单用于将数据和文件发布到webapiendpoint。数据字段之一是使用summernote 插件的RichTextField

发布到endpointangularjs 脚本如下所示:

$scope.transaction = ;
var files = $scope.myFile;
var fd = new FormData();

angular.forEach(files, function (value, key) 
    fd.append("file" + key, value[0]);
);

fd.append("fileContent", JSON.stringify( fileContent: $scope.transaction ));

dataService.uploadFile(baseAddress + "/Generate", fd)
.success(function (data) ).error(function (data)   );

接受请求的端点如下所示:

  [HttpPost]
    public async Task<IHttpActionResult> Generate()
    
        try
        
            if (!Request.Content.IsMimeMultipartContent())
            
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            

           var contentResult = System.Web.HttpContext.Current.Request.Form;                
           var key = contentResult.AllKeys[0];
           var val = contentResult.GetValues(key)[0];

此时var val = contentResult.GetValues(key)[0]; 我收到此错误消息:

A potentially dangerous Request.Form value was detected from the client

我试过这个:

[System.Web.Http.HttpPost, System.Web.Mvc.ValidateInput(false)]

还有

<pages validateRequest="false" />
<httpRuntime requestValidationMode="2.0" />

【问题讨论】:

尝试添加到您的 web.config @J.Loscos 没用 我试图重现您的错误,但在我的机器上 可以解决问题。我不知道为什么它不适合你 您使用的是什么版本的 IIS、.NET 和 ASP.NET? IIS 快递,.Net 4.5.2 【参考方案1】:

您必须允许 html 标签,因为 Summernote 数据包含它们。为此,您需要将AllowHtmlAttribute 添加到您的方法中。

你可能需要做一些修改,因为它可以很容易地做 xss 和其他东西。

【讨论】:

AllowHtml 是要在模型上使用的属性属性。所以他需要在他的控制器动作参数中添加一个模型 @J.Loscos 啊,你当然是对的。我已经有一段时间没有使用它了。 @TestzWCh 我知道 AllowHtmlAttribute。发生错误的点不是转换为模型的点。

以上是关于从客户端将数据和文件发布到 Web api 中检测到潜在危险的 Request.Form 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Oauth2/OpenID 连接构建 Web-API

如何将 Windows 身份验证凭据从客户端传递到 Web API 服务

在 asp.net web api 中使用 MemoryStream 和 ZipArchive 将 zip 文件返回给客户端

如何从 JS 获取和保存令牌中获取 ASP.NET Web Api 令牌(登录)

用于从数据库进行人脸检测和识别的计算机视觉应用程序(+web 界面)

从客户端(...)中检测到有潜在危险的Request.Form 值的处理办法