В зависимости от того, как строка отправляется с запросом, вы должны сделать следующее:
Отправлено в виде простой строки
Если ваш username
или строка отправляется как простая строка в запросе, как показано ниже:
"testuser"
Затем вы можете добавить атрибут [FromBody]
к параметру string
в контроллере, как показано ниже:
public ActionResult GetUser([FromBody] string username)
{
//...
}
Если ваше имя пользователя или строка не отправлены как "testuser"
, передайте переменную или строку методу JSON.stringify следующим образом:
return this.http.post<User>(this.userBackendUrl + "/user", JSON.stringify(username), httpOptions) //...
Отправлено как объект JSON
Если ваше имя пользователя или строка отправлены как объект JSON в запросе, как показано ниже:
{
username: "testuser"
}
Затем вам нужно создать отдельный класс (например, DTO, GetUserRequest
) для привязки tp, который должен выглядеть так:
public class GetUserRequest
{
public string Username { get; set; }
}
Позже вы можете привязать модель (ваш отправленный объект JSON) к этому классу, снова указав атрибут [FromBody]
и параметр с созданным классом в качестве типа данных, как показано ниже:
public ActionResult GetUser([FromBody] GetUserRequest user)
{
//...
}
Несколько параметров без создания дополнительного класса/DTO
Как спросил Лайонел, вот два способа, которыми я знаю, как вы можете привязываться к нескольким параметрам, не создавая дополнительный класс или DTO.
К сожалению, насколько мне известно, вы не можете привязать [FromBody]
к нескольким параметрам.
Но есть следующие два пути:
Отправлять данные в виде закодированного URL-адреса формы
Если вы отправляете закодированный URL-адрес формы данных, вы можете связать данные/параметры с атрибутом [FromForm]
следующим образом:
Отправьте данные в виде закодированного URL-адреса формы:
username=test&email=test%40gmail.com&created=2018-08-07T15%3A02%3A00.736Z
Связать данные с атрибутом [FromForm]
:
public ActionResult GetUser([FromForm] string username, [FromForm] string email, [FromForm] DateTime created)
{
//...
}
Отправить данные как объект JSON и связать с Newtonsoft
Другой способ — использовать JObject
от Newtonsoft. Этот способ немного менее интуитивен, на мой взгляд.
Вы должны отправить данные как обычный объект JSON, например:
{
"username": "test",
"email": "[email protected]",
"created": "2018-08-07T14:53:54.639Z"
}
Затем вы привязываете данные к одному объекту JObject с атрибутом [FromBody]
, а затем привязываете данные к отдельным переменным, как показано ниже:
public void GetUser([FromBody] JObject requestBody)
{
string username = requestBody["username"].ToString();
string email = requestBody["email"].ToString();
DateTime created = requestBody["created"].ToObject<DateTime>();
}
person
adiii4
schedule
07.08.2018