如何读取HttpRequest的主体,WCF
本文关键字:主体 WCF HttpRequest 何读取 读取 | 更新日期: 2023-09-27 18:18:41
我想读取一个WCF web服务接收到的HttpRequest的正文。
WCF web服务是这样的:
[ServiceContract]
public interface ITestRestService
{
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/test")]
string Test(Stream aStrm);
}
发送到此服务的客户端成功调用Test()
方法,但aStrm
抛出异常:
'aStrm.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
我应该使用流来发送正文还是其他内容?
当合同的配置看起来像这样时,我可以将数据作为url的一部分发送:
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "?s={aStr}")]
string Test(string aStr);
但是这是常见的做法吗?我逻辑上不应该将内容添加到请求的正文而不是url吗?
我读过类似的问题,但我仍然不确定。
我同意您的观点,POST请求的正文是发送数据的更好的地方。尽管有些web服务确实通过url发送数据。除了语义之外,还有安全问题,如果敏感数据以url的形式发送,则可以以纯文本形式显示在管理日志中,等等。
除非你真的需要一个Stream
来处理大量的数据,否则你可以创建一个模型类来传输数据。早期版本的ASP。NET Web API (WCF Web API的后继者)要求您为POST主体使用完整的类。
我想试试
public class PostData
{
public string aStr { get; set; }
}
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "?s={aStr}")]
string Test(PostData data);
这是一个参考,你可以使用WCF发布。他演示了通过模型发布JSON数据。http://blog.alexonasp.net/post/2011/05/03/REST-using-the-WCF-Web-API-e28093-POST-it ! . aspx