TL; DR - У меня есть [WebGet(UriTemplate = "/")]
и он не работаетRoot UriTemplate становится угнано WCF странице справки
У меня есть службы 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>
Как вы c см., я обслуживаю как REST, так и SOAP из этой службы. Этот вопрос касается только REST.
В моем браузере (так что GET "/"
в условиях WCF) Я получаю справочную страницу WCF, описывающую конечную точку - тот, который полезен для SOAP, но не очень помогает REST. Однако, если я что-то делаю, он работает так, как ожидалось. Если I POST
к этому URL-адресу, или GET /123456
, я получаю нормальные ответы JSON (как, в действительности он выполняет мою службу).
Похоже, что WCF захватывает операцию «/». Есть ли способ отключить это поведение «помощи» WCF, чтобы я мог выполнять свои операции? Любые предложения очень ценятся.