有没有办法将文件上传到WCF Web API端点?如果是这样,我如何访问网络流来读取数据?
非常感谢任何帮助。
感谢。
答案 0 :(得分:4)
假设您正在谈论客户端:
一种方法是创建一个派生自HttpContent的FileContent类。在覆盖中,当HTTPClient准备好接收流时,您将获得NetworkStream。
如果您询问服务器端,那么您只需获取HTTPRequestMessage并访问httpRequestMessage.Content.ContentReadStream属性。
<强>更新强>
默认情况下,WCF传输仅限于以65K发送消息。如果你想发送更大的内容,你需要启用“流传输模式”,你需要增加MaxReceivedMessageSize的大小,这就是一个防范,以防止有人通过上传大量文件来杀死你的服务器。
因此,您可以使用绑定配置执行此操作,也可以在代码中执行此操作。这是在代码中执行此操作的一种方法:
var endpoint = ((HttpEndpoint)host.Description.Endpoints[0]); //Assuming one endpoint
endpoint.TransferMode = TransferMode.Streamed;
endpoint.MaxReceivedMessageSize = 1024 * 1024 * 10; // Allow files up to 10MB
答案 1 :(得分:2)
此答案仅用于在Web API预览6中添加一些详细信息。
TransferMode
和MaxRecievedMessageSize
是通过WebApiConfigurationClass
新曝光的。
var builder = new WebApiConfiguration();
builder.TransferMode = TransferMode.Streamed;
builder.MaxReceivedMessageSize = 1024 * 1024 * 10;
var serviceRoute = new WebApiRoute(route, new WebAPIServiceHostFactory() { Configuration = builder }, typeof(MyService));
我喜欢它!