Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# HttpContext.Current.Request.Files始终为空_C#_Asp.net_Postman_Httpcontext - Fatal编程技术网

C# HttpContext.Current.Request.Files始终为空

C# HttpContext.Current.Request.Files始终为空,c#,asp.net,postman,httpcontext,C#,Asp.net,Postman,Httpcontext,我看到很多WebAPI接受文件的例子。然而,我还没有找到一个解决方案,无论我做了什么尝试,为什么我的HttpContext.Current.Request.Files中会有一个我通过Postman发布到Web API的文件。(我还通过控制台应用程序发布了该图像,并得到了相同的结果) 我绞尽脑汁想弄明白为什么这么简单的事情就行不通了。我尝试过很多其他的方法,都更像MVC,但这不是一个MVC应用程序,它们抛出了不同的错误。谢谢你的帮助。我也为这个问题挣扎了一段时间,但最终找到了解决办法。在我的例子中

我看到很多WebAPI接受文件的例子。然而,我还没有找到一个解决方案,无论我做了什么尝试,为什么我的HttpContext.Current.Request.Files中会有一个我通过Postman发布到Web API的文件。(我还通过控制台应用程序发布了该图像,并得到了相同的结果)


我绞尽脑汁想弄明白为什么这么简单的事情就行不通了。我尝试过很多其他的方法,都更像MVC,但这不是一个MVC应用程序,它们抛出了不同的错误。谢谢你的帮助。

我也为这个问题挣扎了一段时间,但最终找到了解决办法。在我的例子中,我从一个iOS应用程序调用端点,文件总是空的。我发现我需要有一个与表单中的文件字段名匹配的http头,因此请求必须有一个http头,例如:

file: newImage.jpg
在请求的主体中,您需要

Content-Disposition: form-data; name="file"; filename="newImage.jpg"
Content-Type: image/jpg

请注意,这不是一个有效的请求,只是一个片段。您仍然需要更多的http头和正文中字段周围的边界。我的观点是,似乎要求http头键和表单字段名匹配并且两者都存在

我怀疑你的问题的根本原因很可能就是因为你在帖子中提到的这一点-

我一直在使用Postman发布一个二进制.jpg文件。我已经定好了 content type=“多部分/表单数据”

您不应该在postman工具中明确地这样做。Postman工具足够智能,可以自动检测
内容类型
。请看我的答案,以帮助您更多


内容类型
设置为“多部分/表单数据”涉及到一个复杂的多部分边界概念,详情如下。设置边界的繁重工作由postman工具自动完成,这就是为什么在这种情况下它不希望您显式设置
内容类型的原因。

我认为postman无法填充HttpContext.Current.Request.Files 收集我们使用以下方法解决了此问题: wait Request.Content.ReadAsByteArrayAsync().configurewait(false)


Ivo

您使用的是
表单数据
单选按钮还是只设置
内容类型
标题?我使用的是二进制单选按钮,并选择本地驱动器上的.jpg文件。我还设置了内容类型标题。我还创建了一个全新的Web API,并使用了内置的默认值Controller,试图将图像发布到其中,并导致了相同的问题。这是我在Postman中遇到的问题。我选择了一个文件,然后将文件名从值文本框复制/粘贴到键文本框,并插入了一行新行,这意味着文件名与文件的实际名称不匹配。
file: newImage.jpg
Content-Disposition: form-data; name="file"; filename="newImage.jpg"
Content-Type: image/jpg