gpt4 book ai didi

c# - HttpContext.Current.Request.Files 始终为空

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:49 24 4
gpt4 key购买 nike

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

[HttpPost]
[ActionName("Post")]
[ResponseType(typeof(PeliquinApiRsp))]
public IHttpActionResult Post(int personId)
{
var empPicture = PeliquinIOC.Resolve<IEmpPictureBL>(UserId, UserName, PropertyCode);

if (!(IsAllowed(SysPrivConstants.SYSPRIV__TYPE_PERSONNEL, SysPrivConstants.SYSPRIV__FUNC_PERSONNEL_CARDHOLDER, SysPrivConstants.SYSPRIV__LEVEL_FULL)))
return (Unauthorized());

var apiRsp = new PeliquinApiRsp();

var httpRequest = HttpContext.Current.Request;

if (httpRequest.Files.Count == 0)
return BadRequest();

empPicture.Post(httpRequest.Files[0].InputStream, personId);

apiRsp.SetStatus();
apiRsp.SetData("EmpPicture");

return (Ok(apiRsp));
}

这是一个非常简单的方法。我一直在使用 Postman 发布二进制 .jpg 文件。我已经设置了内容类型=“multipart/form-data”。除了 .Files = 0 之外,我的代码中没有错误。

我的 WebApiConfig 中有一些额外的设置用于 API 的其余部分,但为了以防万一,我将包括它们以及此特定方法的路由:

config.Formatters.Remove( config.Formatters.XmlFormatter );
config.Formatters.JsonFormatter.SupportedMediaTypes.Add( new MediaTypeHeaderValue( "application/json" ) );
config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("multipart/form-data"));


config.Routes.MapHttpRoute(
name: "EmpPicturePost",
routeTemplate: "api/EmpPicture/{personId}",
defaults: new { controller = "EmpPicture", action = "Post" },
constraints: new { personId = @"^\d+$", httpMethod = new HttpMethodConstraint(HttpMethod.Post, HttpMethod.Options) }
);

我无计可施,想弄清楚为什么这么简单的东西就是行不通。我已经尝试了很多其他方法来做到这一点,它们都更像 MVC,但这不是 MVC 应用程序,它们会抛出不同的错误。感谢您的帮助。

最佳答案

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

file: newImage.jpg

在请求的正文中你需要像

这样的东西
Content-Disposition: form-data; name="file"; filename="newImage.jpg"
Content-Type: image/jpg

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

关于c# - HttpContext.Current.Request.Files 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37060996/

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