Я пытался создать простой веб-сервис WCF RESTful, но, похоже, работает только в режиме SOAP. Я принимаю мой сервис с локальным IIS.WCF REST Service возвращает HTTP 400 Bad Request
Это выглядит действительно стандарт:
[ServiceContract]
public interface IMyService
{
[OperationContract]
Guid Login(string username, string password);
...
и:
public class MyService : IMyService
{
[WebGet(UriTemplate = "login?user={user}&password={password}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
public Guid Login(string username, string password)
{
return Guid.Empty;
}
Я также включал поведение в конфигурационном файле и использовать его в:
<endpoint address="" binding="webHttpBinding" contract="MyService" behaviorConfiguration="webHttp"/>
по всем из примеров, которые я знаю ...
Теперь дело в том, что вы вызываете логин от клиента-заглушки, который использует ServiceReference, он отлично выглядит в Fiddler, но он SOAPy. По какой-то причине я не могу ссылаться на свою услугу способом RESTy, даже если/help возвращает 400 Bad Request. (Я призываю http://localhost:8080/MyService.svc/help или/логин и т. Д.)
Что мешает REST принять меры? Заранее спасибо :)
Редактировать: Я нашел ответ.
Оказывается, нужно определить маршрутизацией ...
После добавления этого к Global.asax:
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("MyService",
new WebServiceHostFactory(), typeof(MyService)));
}
Он прошел просто отлично.
Плюс Я заработал, что «.svc» теперь не является частью URL-адреса.
Как правило, вход в систему через GET считается плохой практикой, поскольку это концептуально изменение состояния. Используйте POST (более HTTPS для предпочтения). –
Чтобы вызвать службу REST, вы не должны указывать ссылку на службу на стороне клиента. Вам нужно использовать класс HttpWebRequest, чтобы вызвать его путь RESTful. – Rajesh