在自托管 Web 服务器环境中通过 POST REST API 上传 C# 文件

Posted

技术标签:

【中文标题】在自托管 Web 服务器环境中通过 POST REST API 上传 C# 文件【英文标题】:C# File Upload via POST REST API in a Self-Hosted Web Server Environment 【发布时间】:2014-12-19 19:43:29 【问题描述】:

我创建了一个使用“System.Web.Http.SelfHost”中的“HttpSelfHostConfiguration”自托管的 Web 服务。我需要创建一个 REST API,允许其他人进行 POST 调用以将文件上传到我的服务。

到目前为止,我所做的所有研究都是针对托管 Web 服务的,例如在 IIS 中。因此,允许他们做的是使用“HttpContext.Current”来获取 HttpRequest 内容。

但是,在自托管环境中,“HttpContext.Current”为空,因此我需要另辟蹊径。我的 Google-fu 可能已关闭,但我似乎找不到任何有关如何在自托管环境中完成此操作的信息。

对于如何完成创建允许人们在这种情况下 POST 文件的 REST API 有任何示例或建议吗?

提前致谢!

【问题讨论】:

【参考方案1】:

这篇文章帮助我分配,但我想我会发布我的解决方案来帮助人们。

    public async void Post(HttpRequestMessage Message)
    
        MultipartMemoryStreamProvider x = await Message.Content.ReadAsMultipartAsync();
        Byte[] xx = await x.Contents[0].ReadAsByteArrayAsync();
        File.WriteAllBytes("c:\\test.png", xx);
    

【讨论】:

【参考方案2】:

在您的 post 方法中使用如下所示的 HttpRequestMessage

public HttpResponseMessage Post(HttpRequestMessage request) ...

然后你可以使用类似下面的东西来提取请求消息的上下文

字符串 sRequestcXMLContent = Encoding.UTF8.GetString(request.Content.ReadAsByteArrayAsync().Result);

希望对您有所帮助!

【讨论】:

嗨,达莎娜!我尝试了上面的代码。调试我的服务,我肯定得到了正确的函数,由我的 REST API 客户端调用我的 Web 服务器上的 POST。但是,使用上面的设置“Post(HttpRequestMessage request)”,我在“request”变量中得到的“request.Content”似乎是空的(request.Content.Headers.ContentLength 为 0)。现在,也许我的客户搞砸了(我会做一些测试以确保它不是),但如果你可能马上知道这个问题,我想我现在会给你一个关于我的情况的更新。跨度> 仅供参考,尝试了另一个客户端,但我不再获得 0 的内容长度。我会继续试验并再次更新您! 抱歉,我花了一段时间才回复您!它工作得很好,然后我有几天分心编码的东西。 ^_^ 但是再次感谢!这是一个巨大的帮助!

以上是关于在自托管 Web 服务器环境中通过 POST REST API 上传 C# 文件的主要内容,如果未能解决你的问题,请参考以下文章

为何在onCreate中通过View.post能获取宽高

阿里云Web应用托管创建应用和部署环境的图文教程

如何在自托管 Web API 应用程序中配置 OData 端点

在自托管 Parse Server 中测试 CloudCode

在自托管 Web 应用程序中使用性能计数器

在 WCF REST 服务中通过 POST 发送参数的正确 URI 是啥?