Угловой почтовый запрос к c # web api 2 веб-сервис RESTful - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь отправить http-запрос с углового клиента в веб-службу RESTful C # web API 2.

Мой клиент:

var userId = "123456";
var password = "654321";

const headersContent = new Headers().set('Content-Type', 'application/x-www-form-urlencoded');
var url = "http://localhost:35615/login"
this.http.post(url, {
    "userId": userId,
    "password": password
}, {withCredentials: true}).subscribe(res => {
    console.log(res);
});

Мой сервер:

[Route("login")]
[HttpPost]
public IHttpActionResult LoginReq([FromBody] string parameters)
{
    //Deserialize the parameters.
}

Моя проблема заключается в том, что параметры var null, хотя данные запроса post на вкладке сети в chrome включают данные.

Может кто-нибудь объяснить мне, что я делаю неправильно и как я могу это исправить? Спасибо!

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

Если вы передаете объект из запроса Angular POST, можно изменить метод POST Web API, чтобы он принимал определенный пользователем тип в качестве параметра для чтения его из тела запроса.

Вы можете создать указанный ниже тип пользователя в C #, чтобы связать свойства UserId и Password из вашего углового почтового запроса

public class UserLogin
{
    public int UserId { get; set; }
    public string Password { get; set; }
}

[Route("login")]
[HttpPost]
public IHttpActionResult LoginReq([FromBody] UserLogin user)
{
    //Deserialize the parameters.
}

Я бы рекомендовал просмотреть эту документацию , чтобы узнать больше о привязке параметров в Web API. Поверьте, оно того стоит.

0 голосов
/ 07 ноября 2018

Вы передаете анонимный объект со свойствами «UserId» и «Password». Создайте класс Data Contract, который имеет эти 2 свойства как строки, и используйте его в параметрах вашего метода REST.

public IHttpActionResult LoginReq([FromBody] User user) { ... }
0 голосов
/ 07 ноября 2018

Просто добавьте JSON.stringify(), вы отправляете объект на сервер, который ожидает в качестве параметра только строку, поэтому сделайте его строкой и передайте значение, в противном случае создайте модель с userid и password на стороне сервера. и упомянуть этот объект

let obj =  {
        "userId": userId,
        "password": password
    };   
this.http.post(url, JSON.stringify(obj), {withCredentials: true}).subscribe(res => {
        console.log(res);
    });

Приведенный выше код будет работать с string parameters - В дальнейшем попытайтесь использовать модель и передать объект из Angular

Удачного кодирования!

0 голосов
/ 07 ноября 2018

Вы публикуете userId и password, но ожидаете String parameters. Измените на String userId, String password. Только Modelbinder будет связывать совпадающие свойства.

...