#c# #asp.net #.net #asp.net-web-api
#c# #asp.net #.net #asp.net-web-api
Вопрос:
В настоящее время я пытаюсь опубликовать в своем веб-API, у которого есть подобный контроллер.
public class ProductController : ApiController
{
[HttpPost]
[AcceptVerbs("POST")]
public IHttpActionResult PostNewUser(UserModel data)
{
if (data.Username == null)
{
return NotFound();
}
return Ok();
}
}
Из консольного приложения C #, использующего HttpClient
делаю это.
var User = new UserModel
{
Username = "admin",
Password = "password",
HWID_Hash = "password"
};
string output = JsonConvert.SerializeObject(User);
var client = new HttpClient();
var stringContent = new StringContent(output);
var response = await client.PostAsync($"http://localhost:51838/api/product/PostNewUser", stringContent);
if (response.ReasonPhrase.ToLower() == "not found")
{
Console.WriteLine("User doesn't exist.");
}
if (response.ReasonPhrase.ToLower() == "ok")
{
Console.WriteLine("Welcome.");
}
Но когда я устанавливаю точку останова в веб-API, он даже не реагирует на запрос, который я отправляю из консольного приложения.
Почему это?
Комментарии:
1. Добавьте
[FromBody]
атрибут перед параметром метода действия следующим образом:public IHttpActionResult PostNewUser([FromBody] UserModel data)
. Кроме того, вам не нуженAcceptVerbs("POST")
атрибут.2. По-прежнему не реагирует.
3. клиент. PostAsync возвращает
StatusCode = UnsupportedMediaType
4. Попробуйте инициализировать
var stringContent = new StringContent(output, Encoding.UTF8, "applicaiton/json");
5. Отлично! Я опубликовал ответ
Ответ №1:
Добавьте [FromBody]
атрибут перед параметром метода действия следующим образом:
public IHttpActionResult PostNewUser([FromBody] UserModel data)
Кроме того, укажите тип содержимого для содержимого строки json следующим образом:
stringContent = new StringContent(output, Encoding.UTF8, "applicaiton/json")