TL;DR - 我有[WebGet(UriTemplate = "/")]
,但它不起作用
我有如下所示的 WCF 服务:
public interface IUserService
{
// This doesn't work
[OperationContract]
[WebGet(UriTemplate = "/")]
IList<User> GetAllUsers();
/////////////////////////////////////
// Everything below this works
/////////////////////////////////////
[OperationContract]
[WebGet(UriTemplate = "/{id}/")]
User GetUserById(string id);
[OperationContract]
[WebInvoke(UriTemplate = "/", Method = "POST")]
IList<User> AddUser();
[OperationContract]
[WebInvoke(UriTemplate = "/{id}/", Method = "PUT")]
IList<User> UpdateUser(string id, User user);
}
这是端点的配置
<service name="MyCompany.UserService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:80/api/users/" />
</baseAddresses>
</host>
<endpoint address=""
behaviorConfiguration="WebHttpBehavior"
binding="webHttpBinding"
contract="MyCompany.IUserService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<endpoint address="soap"
binding="wsHttpBinding"
contract="MyCompany.IUserService" />
</service>
如您所见,我正在通过该服务同时提供 REST 和 SOAP。这个问题只涉及 REST。
当我http://localhost:80/api/users/
在浏览器中访问时(所以GET "/"
用 WCF 术语),我会看到描述端点的 WCF 帮助页面——该页面对 SOAP 很有用,但对 REST 帮助不大。但是,如果我做任何其他事情,它会按预期工作。如果我POST
访问此 URL 或GET /123456
,我会得到正常的 JSON 响应(例如,它实际上执行了我的服务)。
似乎 WCF 正在劫持“/”操作。有什么方法可以关闭这个 WCF“帮助”行为,以便我可以执行我的操作?任何建议都非常感谢。