2015-06-25 4 views
-1

я следующий метод в моем Web API:Web API всегда нулевой

[AcceptVerbs("POST")] 
public bool MoveFile([FromBody] FileUserModel model) 
{ 
    if (model.domain == "abc") 
    { 
     return true; 
    } 
    return false; 
} 

FileUserModel определяется как:

public class FileUserModel 
{ 
    public string domain { get; set; } 
    public string username { get; set; } 
    public string password { get; set; } 
    public string fileName { get; set; } 
} 

Я пытаюсь вызвать это через Скрипач но когда Я делаю, что модель всегда имеет значение null. В Fiddler я отправил композитору использовать POST, там есть URL-адрес и исправлен, когда отладчик в Visual Studio прерывается при вызове. Запрос Я настроен как:

User-Agent: Fiddler 
Host: localhost:46992 
Content-Length: 127 
Content-Type: application/json 

Запрос Тело:

"{ 
    "domain": "dcas" 
    "username": "sample string 2", 
    "password": "sample string 3", 
    "fileName": "sample string 4" 
}" 

Но всякий раз, когда я бегу композитор, когда отладчик попадает в точку останова всегда показывает модель равна нулю.

+1

ли тело запроса у окружающих двойные кавычки, как Вы разместили здесь? – DavidG

+1

- это опечатка, что после домена: dcas нет ","? – Mark

+0

Вы пытались изменить тип входного параметра для одного теста из FileUserModel в строку? –

ответ

0

Проблема у вас есть вы публикуете данные JSON с близкими двойными кавычками. Удалите их, и он должен работать.

исправить также недостающую запятую:

{ 
    "domain": "dcas", 
    "username": "sample string 2", 
    "password": "sample string 3", 
    "fileName": "sample string 4" 
} 
1

Вам не хватает , в запросе, который вы отправляете. Кроме того, из-за закрытых двойных кавычек вы фактически отправляете строку JSON, а не объект JSON. Удаление цитат и добавление запятой должно решить вашу проблему.

{ 
    "domain": "dcas", // << here 
    "username": "sample string 2", 
    "password": "sample string 3", 
    "fileName": "sample string 4" 
} 

Кроме того, поскольку Вы отправляете модель, вам не нужен атрибут [FromBody].

[AcceptVerbs("POST")] 
public bool MoveFile(FileUserModel model) 
{ 
    if (model.domain == "abc") 
    { 
     return true; 
    } 
    return false; 
} 

Это должно быть прекрасно. Для получения дополнительной информации об этом см. this blog.

+0

Это избыточно, но doesn Ответ на вопрос – DavidG

+0

Редактирование также неверно, что такое «строка JSON» в этом контексте? С кавычками данные просто бессмысленны для API. – DavidG

+0

Редактирование действительно дает правильный ответ. будет интерпретироваться API как строка JSON, потому что 'Content-Type' (согласно сообщению OP) является' app заревым/json'. – Knelis

0

Вам нужно сделать Ajax вызова, как показано ниже

$(function() { 
    var FileUserModel = { domain: "dcas", username: "sample string 2", 
      password: "sample string 3", fileName: "sample string 4"}; 
    $.ajax({ 
     type: "POST", 
     data :JSON.stringify(FileUserModel), 
     url: "api/MoveFile", 
     contentType: "application/json" 
    }); 
}); 

Не забудьте пометить тип содержимого в формате JSON и на сервере кода на стороне апи

[HttpPost] 
public bool MoveFile([FromBody] FileUserModel model) 
{ 
    if (model.domain == "abc") 
    { 
     return true; 
    } 
    return false; 
} 

Sending HTML Form Data in ASP.NET Web API

+0

Его код в порядке, это неверные данные. – DavidG

+0

@DavidG - я исправляю эту часть в своем коде ... а также предлагаю кое-что, что ему нужно проверить ... я думаю, что -1 задается, когда задано неправильное решение, а не для правильного решения .. есть ли какая-либо проблема, которую я предлагаю использовать JSON.stringify и попросить его проверить contentType: «application/json» .. я думаю, ничего плохого в этом –

+0

Я согласен, но то, что вы разместили здесь, не является решением. OP также не упоминал Javascript или jQuery. И я не сказал, что это я дал вам вниз. – DavidG

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