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/
时(在WCF术语中GET "/"
),我得到了描述端点的WCF帮助页面 - 一个对SOAP有用但对REST没什么帮助的端点。但是,如果我做了其他任何事情,它会按预期工作。如果我POST
到此网址或GET /123456
,我会获得正常的JSON响应(例如,它实际上会执行我的服务)。
似乎WCF正在劫持“/”操作。有没有办法关闭这个WCF“帮助”行为,以便我可以执行我的操作?任何建议都非常感谢。
答案 0 :(得分:3)
首先,您可以使用以下配置选项禁用服务帮助页面:
<serviceBehaviors>
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" />
</serviceBehaviors>
但是,这将使基地址默认返回服务wsdl。所以要移动它,你也可以使用这个配置选项:
<serviceBehaviors>
<serviceMetadata httpGetEnabled="true" httpGetUrl="wsdl"/>
</serviceBehaviors>
这会将wsdl网址移动到your_service_base_address +“wsdl?wsdl”。