【问题标题】:How to read body of HttpRequest, WCF如何读取 HttpRequest、WCF 的正文
【发布时间】:2014-10-13 07:07:08
【问题描述】:

我想读取 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 吗?

我已经阅读了similarquestions,但我仍然不确定。

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    我同意您的观点,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

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 2016-01-05
      • 2011-01-12
      相关资源
      最近更新 更多