.net - 如何在服务根地址(不带尾部斜杠)托管 WCF REST 服务?

标签 .net wcf rest wshttpbinding

我有一个使用 wsHttpBinding 在地址上托管的服务(主机基地址是 http://localhost/MyService )。

在我的契约(Contract) (IMyService) 中,我有:

    [OperationContract]
    [WebInvoke(
        Method = "GET",
        UriTemplate = "/")]
    Stream GetRootPage();

如果我运行我的服务并浏览到 http://localhost/MyService/ ,效果很好。如果我浏览到 http://localhost/MyService ,我看到一个默认的 WCF 页面,表明该服务未启用元数据发布服务。

我尝试了 UriTemplate 的各种组合:

  • UriTemplate = ""
  • UriTemplate =“/”
  • UriTemplate = "*"

结合服务基址:

所有这些都会产生相同的行为。在之前的某个时刻,我可以发誓这是有效的,尽管我认为我可能一直在 UriTemplate 中使用子路径。我知道,如果我的 UriTemplate 为“/abc/123/”,我可以浏览到/abc/123(不带尾部斜杠),因为 WCF 实际上会自动发出 HTTP 307 重定向。

我正在使用 .NET 4.0。

最佳答案

我想出了如何做到这一点:

确保禁用默认 WSDL 生成(或至少不使用默认 URL):

<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />

确保帮助 URL 已禁用:

<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" />

关于.net - 如何在服务根地址(不带尾部斜杠)托管 WCF REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7450140/

相关文章:

c# - 在 C# 8 中有没有更短的写法?

c# - Jquery 在客户端对 gridview 列进行排序

.net - 使用正则表达式替换字符串

visual-studio - Visual Studio 无法通过 Apache 反向代理在 Windows Vista 或更高版本中添加 WSDL 资源

.net - WCF:接口(interface)、泛型和 ServiceKnownType

c# - Azure SQL 数据库列表 - 服务器使用 REST API 的使用情况

system.web.http.HttpError 的.Net 标准/核心版本

c# - WCF REST - 是否可以在不结束执行的情况下返回响应?

javascript - 从 javascript 中现有的对象克隆一个新对象

rest - 嵌入式 Jetty : In secure https server, ContextHandler 重定向到 http URI