【问题标题】:HttpContext.Current alternative in Owin Self Host?Owin Self Host 中的 HttpContext.Current 替代方案?
【发布时间】:2021-09-30 03:21:38
【问题描述】:

我正在尝试获取一个文件,该文件在 POST 请求的正文中(从 Postman)发送到我使用 Owin 自托管的 REST API。在调试时,我可以确认它到达了正确的端点,但 HttpContext.Current 总是返回 null。几乎 HttpContext.anything 返回 null。所以我不明白在使用 Owin 自托管时我应该如何通过 POST 请求接收文件并在我的 REST API 中处理它。我试过 Request.GetOwinContext() 但这并没有返回任何有用的东西。

我如何做到这一点?

【问题讨论】:

    标签: c# owin rest self-hosting


    【解决方案1】:

    控制器的Request 属性可以帮助访问文件。

    public class FileController : ApiController
    {
        [HttpPost]
        public async Task Post()
        {
            if (Request.Content.IsMimeMultipartContent())
            {
                var multipartContent = await Request.Content.ReadAsMultipartAsync();
    
                // "thefile" is the form field name
                HttpContent httpContent = multipartContent.Contents
                    .Where(c => c.Headers.ContentDisposition.Name == "\"thefile\"")
                    .Single();
    
                // httpContent contains the file, for example:
                var fileContents = await httpContent.ReadAsStringAsync();
            }
        }
    }
    

    【讨论】:

    • 感谢分享。我在var multipartContent = await Request.Content.ReadAsMultipartAsync(); 行收到Unexpected end of MIME multipart stream. MIME multipart message is not complete. 错误。我在 WebConfig 中添加了config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("multipart/form-data"));,所以我不确定是什么导致了这个错误。有什么想法吗?
    • 它是否适用于小文本文件,可能只有几千字节?我想知道这是否是最大请求大小。
    • 我发送了一个 .rtf 文件,其中包含两个段落,大约 40kb @StephenJennings
    • 不确定,这对我来说在一个最小的控制台应用程序中是成功的,即使文件是几兆字节。
    • 很奇怪。好吧,谢谢你的建议,也许我只需要找到对这个 sn-p 的正确调整。干杯@StephenJennings
    猜你喜欢
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多