Недавно я начал использовать WCF WebApi для создания REST API. Я следил за примерами, доступными на CodePlex, а также серия статей Алекса Цейтлера.
Я попытался создать метод, который принимает данные через 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. Имя параметра: name'. Смотрите журналы сервера для более подробной информации. Трассировка стека исключений:
в System.Net.WebHeaderCollection.CheckBadChars(имя строки, логическое значение isHeaderValue) в System.Net.WebHeaderCollection.Add(имя строки, значение строки) в System.Collections.Specialized.NameValueCollection.Add(NameValueCollection c) в System.ServiceModel.Activation .HostedHttpContext.HostedRequestContainer.System.ServiceModel.Channels.HttpRequestMessageProperty.IHttpHeaderProvider.CopyHeaders(заголовки WebHeaderCollection) в System.ServiceModel.Channels.HttpRequestMessageProperty.get_Headers() в Microsoft.ApplicationServer.Http.Channels.HttpMessageEncodingRequestContext(message.ConfigureRequest) :\codeplex\wcf\Http\Src\Microsoft.ApplicationServer.Http\Microsoft\ApplicationServer\Http\Channels\HttpMessageEncodingRequestContext.cs:строка 222 в Microsoft.ApplicationServer.Http.Channels.HttpMessageEncodingRequestContext.get_RequestMessage() в F:\codeplex\ wcf\Http\Src\Microsoft.ApplicationServer.Http\Microsoft\ApplicationServer\Http\Channels\Htt pMessageEncodingRequestContext.cs: строка 54 в System.ServiceModel.Dispatcher.ChannelHandler.EnsureChannelAndEndpoint (запрос RequestContext) в System.ServiceModel.Dispatcher.ChannelHandler.TryRetrievingInstanceContext (запрос RequestContext)
Любая идея, почему это происходит?