Устранение неполадок WebApi GET 400 BadRequest

1

Когда я звоню на мой webapi, работающий локально, я передаю данные в requestUri как кодированный J64 из кодирования base64 моего сериализованного объекта, но получая StatusCode 400 на каждом шагу.

Как исправить мой запрос?

public class VerifyController : ApiController
{
    // GET: api/Verify/jsonStringAddressOriginal
    public AddressResult Get(string base64AddressOriginal)

Вызывающий:

var requestUri = string.Format("api/verify/{0}", base64address);
Console.WriteLine("requestUri:\n{0}", requestUri);
HttpResponseMessage response = client.GetAsync(requestUri).Result;

requestUri:

api/verify/eyJDb21wYW55IjoiIiwiQWRkcmVzcyI6Ijc3NTAgQmVsZm9ydCBQYXJrd2F5IDIwMCIsI
kFkZHJlc3MyIjoiIiwiU3VpdGUiOiIiLCJDaXR5IjoiSmFja3NvbnZpbGxlIiwiU3RhdGUiOiJGTCIsI
lppcCI6IjMyMjU2IiwiUGx1czQiOiIiLCJMYXN0TGluZSI6IiIsIkNvdW50cnlDb2RlIjoiIiwiVXJiY
W5pemF0aW9uIjoiIiwiTGFzdE5hbWUiOiIiLCJQYXJzZWRBZGRyZXNzUmFuZ2UiOiIiLCJQYXJzZWRQc
mVEaXJlY3Rpb24iOiIiLCJQYXJzZWRTdHJlZXROYW1lIjoiIiwiUGFyc2VkU3VmZml4IjoiIiwiUGFyc
2VkUG9zdERpcmVjdGlvbiI6IiIsIlBhcnNlZFN1aXRlTmFtZSI6IiIsIlBhcnNlZFN1aXRlUmFuZ2UiO
iIiLCJQYXJzZWRSb3V0ZVNlcnZpY2UiOiIiLCJQYXJzZWRMb2NrQm94IjoiIiwiUGFyc2VkRGVsaXZlc
nlJbnN0YWxsYXRpb24iOiIifQ==
Error code: BadRequest
Reason: Bad Request

Я думаю, что это неверный запрос, но я не знаю, каким образом. По-видимому, нет никаких дополнительных свойств объекта ответа, детализирующего, какая ошибка представляет собой код состояния 400. http://msdn.microsoft.com/en-us/library/azure/dd179357.aspx

Это мой первый WebApi, поэтому, отвечая, не делайте никаких предположений о моей конфигурации. VS2013 update 3, Web Api, используя HttpClient в качестве вызывающего.

  • 1
    Будет ли == на конце Ури причиной этого? Хм, может быть, мне нужно UrlEncode base64.
  • 0
    Это звучит как очень вероятно. Мне любопытно, если это решило твою проблему.
Показать ещё 1 комментарий
Теги:
asp.net-web-api

1 ответ

1
Лучший ответ

Я не подсчитывал количество символов в вашем URI, но очень длинные URI (> 2000 символов) могут вызвать проблемы. Попробуйте сделать запрос POST и поместить данные base64 в тело запроса.

  • 0
    507 символов. Я считал это. POST тоже не будет RESTful? Я просто передаю значение (адрес) и хочу вернуть значение (очищенный адрес).
  • 0
    Я не согласен с тем, что POST не RESTful. GET в терминах REST имеет очень четко определенную семантику и означает «дай мне ресурс, который уже существует на сервере». Я предполагаю, что URL со строкой base64 семантически не обращается к ранее существовавшему ресурсу, не так ли?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню