2014-12-31 4 views
2

Мой Javascript код:Как правильно отправить запрос PUT в приложение webAPI?

$.ajax({ 
     type: "PUT", 
     url: "/api/WordsAPI/"+wordData.ID, 
     data: { word: wordData} 
    }); 

Часть моего C# код:

// PUT: api/WordsAPI/5 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutWord(int id, Word word) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != word.ID) 
     { 
      return BadRequest(); 
     } 

     [...] 
    } 

В VisualStudio отладчика я могу видеть, что приложение выполняет второй BadRequest. Все данные в переменном «слово» на стороне сервера равны нулю. Понятия не имею почему. «id» переменная в порядке, она сохраняет правильный идентификатор.

В отладчике javascript в Firefox все выглядит нормально. wordData не является нулевым (wordData.id отправляется должным образом на сервер), и я вижу, что все данные были успешно отправлены на сервер.

Что может быть неправильным? Что мне делать?

EDIT:

запрос в светлячок (это то, что отправляется в браузере): enter image description here

+0

должен работать .. попытаться изменить 'данные: {слова: wordData}' 'к данным: JSON.stringify (wordData) 'и убедитесь, что ваш' wordData' имеет те же свойства, что и слово Word. –

+0

. Вы также можете пометить слово 'word' атрибутом' [FromBody] ' –

+0

. Я не уверен, что« wordData имеет те же свойства, что и слово Word ». Я имею в виду: в классе Word у меня есть одно свойство, которое содержит значение DateTime. В моем приложении я отправляю свою переменную Word клиенту, клиент изменяет эти данные и отправляет их обратно на сервер. Я подозреваю, что свойство «DateTime» на самом деле является «строкой» на стороне сервера. Что мне тогда делать? – Piotrek

ответ

2

Код на стороне сервера отлично подходит для меня. Однако JavaScript должен быть следующим.

$.ajax({ 
     type: "PUT", 
     url: "/api/WordsAPI/"+wordData.ID, 
     data: wordData 
}); 

Я предполагаю, что wordData является Object с определением образца

var wordData = { 
    ID: 5, 
    UsersLanguage: "string data" 
    // etc 
} 
1

Я согласен с Всеволодом Вам нужно добавить [FromBody] тег перед классом слову API-интерфейс. Во-вторых, поскольку Simoco говорит, что вам нужно убедиться, что отправляемая вами wordData имеет ту же структуру, что и ваша модель Word.

смысл, если вы класс выглядел как этот

public class Word{ 
int id {get; set;} 
string someText {get; set;} 
} 

Тогда ваше слово вы отправляете из JavaScript должен иметь ту же структуру,

var word = {id : 1, someText: "text string"}; 

Я хотел бы также предположить, что вы отладки в VS на метод, чтобы убедиться, что его называют. Вы можете увидеть, что подбирается, если вы наводите курсор на параметр Word

+0

1. У меня есть добавлено [FromBody] все еще не работает. 2. Не проверяйте ModelState.IsValid? Если да, кажется, что модель в порядке ... – Piotrek

Смежные вопросы