Я недавно начал использовать WCF WebApi для создания API REST. Я проследил образцы, доступные на CodePlex, а также серию статей от Alex Zeitler.
Я попытался создать метод, который принимает данные через POST следующим образом:
[ServiceContract]
public class AuthenticateApi
{
[WebInvoke(UriTemplate = "", Method = "POST")]
public HttpResponseMessage<LoginModel> Post(LoginModel loginModel)
{
loginModel.IsValidated = true;
return new HttpResponseMessage<LoginModel>(loginModel);
}
}
А это моя сущность:
public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
public bool IsValidated { get; set; }
}
И, наконец, это моя конфигурация в Global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapServiceRoute<AuthenticateApi>("login");
}
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
Когда я пытаюсь ПОСТАВИТЬ что-то, используя Fiddler, таким образом:
Content-Type: application/json
Accept: application/json
{"Username": "mahdi", "Password":"123"}
Host: localhost:8181
Я получаю следующее сообщение об ошибке:
Сервер обнаружил ошибку при обработке запроса. Исключение
сообщение «Указанное значение содержит недопустимые символы заголовка HTTP.
Имя параметра: имя '. Смотрите журналы сервера для более подробной информации. Исключение
трассировка стека:
at System.Net.WebHeaderCollection.CheckBadChars (имя строки, логическое значение
isHeaderValue) в System.Net.WebHeaderCollection.Add (имя строки,
Строковое значение) в
System.Collections.Specialized.NameValueCollection.Add (NameValueCollection
кошка
System.ServiceModel.Activation.HostedHttpContext.HostedRequestContainer.System.ServiceModel.Channels.HttpRequestMessageProperty.IHttpHeaderProvider.CopyHeaders (WebHeaderCollection
заголовки) в
System.ServiceModel.Channels.HttpRequestMessageProperty.get_Headers ()
в
Microsoft.ApplicationServer.Http.Channels.HttpMessageEncodingRequestContext.ConfigureRequestMessage (Message
сообщение) в
F: \ CodePlex \ ФОС \ Http \ Src \ Microsoft.ApplicationServer.Http \ Microsoft \ ApplicationServer \ Http \ Channels \ HttpMessageEncodingRequestContext.cs: линия
222 в
Microsoft.ApplicationServer.Http.Channels.HttpMessageEncodingRequestContext.get_RequestMessage ()
в
F: \ CodePlex \ ФОС \ Http \ Src \ Microsoft.ApplicationServer.Http \ Microsoft \ ApplicationServer \ Http \ Channels \ HttpMessageEncodingRequestContext.cs: линия
54 в
System.ServiceModel.Dispatcher.ChannelHandler.EnsureChannelAndEndpoint (RequestContext
запрос) в
System.ServiceModel.Dispatcher.ChannelHandler.TryRetrievingInstanceContext (RequestContext
запрос)
Есть идеи, почему это происходит?