Метод контроллера MVC не получает данные json от $ http post - PullRequest
0 голосов
/ 27 мая 2018

Это может быть основной вопрос, но я не могу найти, где проблема.Я использую .Net Core для внутреннего интерфейса и angularJS для внешнего интерфейса.ниже мой код.

HTML

<div ng-controller="loginController">
<input type="text" ng-model="email"><br />
<input type="text" ng-model="password"><br />
<input type="submit" ng-click="login()">
</div>

AngularJS Code

app.controller('loginController',['$scope','$http', function (scope, http) {

scope.login = function () {
    var req = {
        method: 'POST',
        url: '/Account/loginInfo',
        data: { email: scope.email, password: scope.password },
        headers: {
            "Content-Type": "application/json"
        }
    }
    http(req)

        .then(function successCallback(response) {

        }, function errorCallback(response) {

        });
};
}]);

Back-end c #

[HttpPost]
public JsonResult loginInfo(string email, string password)
{
  //do something here
}

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

что я пробовал:

  • Установка типа контента на "application / x-www-form-urlencoded "
  • Передача данных в виде объекта Json
  • Преобразование значений области в строку

Кажется, что ни одна из них не работает.кто-нибудь сталкивался с такой проблемой или мнением эксперта, пожалуйста.

Следил за этим сообщением Angular JS не отправляет данные в Web Api .Я не получил одобренный ответ или не связан с моей проблемой.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Необходимо использовать атрибут [FromBody] с параметром модели.

public class Credentials
{
    public string Email { get; set; }
    public string Password { get; set; }
}

public IActionResult Login([FromBody]Credentials creds)
{
    // do stuff
}

Это связано с тем, что в ASP.NET Core MVC тип содержимого по умолчанию - application/x-www-form-urlencoded (для обработки данных формы HTML),Атрибут [FromBody] указывает связывателю модели вместо этого попытаться создать модель из содержимого JSON.

0 голосов
/ 27 мая 2018

Вы должны создать класс или интерфейс для отправки нескольких параметров

public class PostParams
{
    public string email { get; set; }
    public string password { get; set; }
}     
[HttpPost]
public JsonResult loginInfo(PostParams params)
{
  //do something here

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...