【问题标题】:UriTemplateTable does not support multiple templates that have equivalent path as templateUriTemplateTable 不支持具有与模板等效路径的多个模板
【发布时间】:2016-07-08 23:46:10
【问题描述】:

我似乎无法让 WCF 开心。我的服务中有 2 种方法,这里是它们的 Uri 和方法 sig:

    [WebGet(UriTemplate = "/?memberID={memberID}&count={count}&pageNumber={pageNumber}&sortOrder={sortOrder}&event_ID={event_ID}&ticketids={ticketids}")]
    public InventoryResponse Get(string memberID, string count, string pageNumber, InventorySortOrder sortOrder, string event_ID, string ticketids)


    [WebGet(UriTemplate = "/?memberID={mmberID}&count={count}&pageNumber={pageNumber}&sortOrder={sortOrder}&event_ID={event_id}&ticketids={ticketids}&isTestCall=1")]
    public virtual InventoryResponse GetTest(string memberID, string count, string pageNumber, InventorySortOrder sortOrder, string event_id, string ticketids, bool isTestCall)

似乎即使在第二个Uri上,我在末尾添加了&isTestCall=1”,“&isTestCall={isTestCall}”无论我做什么我仍然得到这个错误,即使我觉得我已经区分了 Uri:

UriTemplateTable 不支持与模板具有等效路径的多个模板 '/?memberID={memberID}&count={count}&pageNumber={pageNumber}&sortOrder={sortOrder}&event_ID={event_ID}&ticketids={ticketids}' 但有不同的查询字符串,其中查询字符串不能全部通过文字值来消除歧义。有关详细信息,请参阅 UriTemplateTable 的文档。

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    我不是 WCF 专家,但该错误意味着您不能拥有具有不同参数的相同 uri(在您的情况下为“/”)的模板。

    也许你可以只使用一个函数和一个可选参数?

    【讨论】:

    • 我需要 2 个函数。我们提供了一个临时的 Test GET 方法。
    • 有一个可选参数,就是isTestCall。那些 Uris 不一样,我说我将 isTestCall 添加到 URi 这应该使它与第一个模式不同,这就是为什么我不知道为什么会抱怨。
    • 我相信这是因为 uri 是相同的,您正在更改参数,而不是 uri 的位置,之后还有什么?是参数,如果你想要另一个 uri 试试 "/test/?(yourparameters...)"
    • 但它不一样,这意味着我添加了 isTestCall 这应该使 Uri 对于 GetTest 方法是唯一的
    • 不,WCF 使用 Uri 路径来确定调用哪个函数。错误“UriTemplateTable不支持具有等效路径的多个模板...”中确实很好地解释了,这里的关键是“路径”,两个函数具有完全相同的路径(“/”),正如我所说,之后的任何内容“?”是参数,不是路径的一部分。
    猜你喜欢
    • 2018-08-25
    • 2018-03-31
    • 2015-11-03
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多