当 url 段为 json 字符串时,访问 WCF Rest 服务 (WebGet) 时未找到 404

Posted

技术标签:

【中文标题】当 url 段为 json 字符串时,访问 WCF Rest 服务 (WebGet) 时未找到 404【英文标题】:Not found 404 while accessing WCF Rest service (WebGet) when url segment is json string 【发布时间】:2016-10-20 05:21:23 【问题描述】:

在我的项目中,我必须将动态 Json 字符串传递给 WCF Rest 服务 Web 获取。

当我传递一些字符串时,一切正常。

http://localhost:58014/MyService.svc/api/queries/somestirng

但是当我将 json 字符串作为 url 段传递时,会发生错误。

"Key":"UserHomePageInfoQuery","Message":"\"UserName\":\"usr83\""

http://localhost:58014/MyService.svc/api/queries/257b%2522Key%2522%253a%2522UserHomePageInfoQuery%2522%252c%2522Message%2522%253a%2522%257b%255c%2522UserName%255c%2522%253a%255c%2522usr83%255c%2522%257d%2522%257d

这是我的服务运营合同定义

    [OperationContract]
    [WebGet(UriTemplate = "api/queries/queryString",                        
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    Response Query(string queryString);

我知道我可以使用 POST,但所有服务请求都是查询

我有另一个 POST 命令服务

[OperationContract]
        [WebInvoke(UriTemplate = "api/commands/",
            Method = "POST",            
            RequestFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
            ResponseFormat = WebMessageFormat.Json)]       
        Response Execute(Request request)

【问题讨论】:

它一定是GET吗?您可以简单地 POST JSON 字符串。 是的,因为只有查询操作通过这个服务。我有另一个命令服务作为 post 不是也可以把WebGet改成WebInvoke吗?还是要求,此方法应仅接受 GET? 是的。它应该只接受 GET。为了清楚起见,我编辑问题 你检查过这个吗? ***.com/questions/24551412/… 【参考方案1】:

我在 queryString 参数中使用了通配符 (*),表示“URI 的其余部分”

https://msdn.microsoft.com/en-us/library/bb675245.aspx

    [OperationContract]
    [WebGet(UriTemplate = "api/queries/*queryString",                        
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    Response Query(string queryString);

【讨论】:

以上是关于当 url 段为 json 字符串时,访问 WCF Rest 服务 (WebGet) 时未找到 404的主要内容,如果未能解决你的问题,请参考以下文章

WCF 无法反序列化 JSON 请求

WCF GET URL 长度限制问题:错误请求 - 无效 URL

每次调用端点时,自托管 WCF 服务全局对象似乎都是新创建的

如何在运行时通过 URL 使用 WCF Web 服务?

WCF REST:返回 JSON 或 XML 以供多个客户端访问?

带有 WCF 调用的 Ajax 返回 404 错误