Как получить и обработать AngularJS HTTP POST в C #? - PullRequest
0 голосов
/ 05 декабря 2018

Я разрабатываю веб-сайт, связанный с базой данных SQL и веб-приложением Azure.Приложение поддерживает аутентификацию.На данный момент я могу войти в систему пользователя с помощью класса Owin OAuthAuthorizationServerProvider.

Вот код, который я использую для POST-данных входа в систему из моего файла Angularjs:

fac.login = function (user) {
      var obj = { 
                   'username': user.username, 'password': user.password, 
                   'grant_type': 'password'
                };

    Object.toparams = function ObjectsToParams(obj) 
     {
        var p = [];
        for (var key in obj) 
        {
            p.push(key + '=' + encodeURIComponent(obj[key]));
        }
        return p.join('&');
     }

    var defer = $q.defer();

    $http({
        method: 'post',
        url: serviceBasePath + "/token",
        data: Object.toparams(obj),
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).then(function (response) {
        userService.SetCurrentUser(response.data);
        defer.resolve(response.data);
    }, function (error) {
        defer.reject(error.data);
    })
    return defer.promise;
}

И яиметь дело с данными и идентификацией путем переопределения: Task GrantResourceOwnerCredentials (контекст OAuthGrantResourceOwnerCredentialsContext).

Это работает отлично.Сейчас я пытаюсь создать страницу «Вход» на основе той же структуры.

Мне кажется, я знаю, как разместить данные в AngularJS следующим образом:

fac.suscribe = function (newUser) {
    var obj = {
        'username': newUser.username, 'surname': newUser.surname, 'firstname': newUser.firstname,
        'password1': newUser.password1, 'password2': newUser.password2, 'email': newUser.email, 'guid': newUser.guid
    };
    Object.toparams = function ObjectsToParams(obj) {
        var p = [];
        for (var key in obj) {
            p.push(key + '=' + encodeURIComponent(obj[key]));
        }
        return p.join('&');
    }

    var defer = $q.defer();
    $http({
        method: 'post',
        url: serviceBasePath + "/register",
        data: Object.toparams(obj),
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).then(function (response){
        userService.SetCurrentUser(response.data);
        defer.resolve(response.data);
    }, function (error) {
        defer.reject(error.data);
    })

    return defer.promise;
}

Но яИнтересно, как я могу получить данные для генерации ответа на пост?Есть идеи по C #, желательно?

1 Ответ

0 голосов
/ 05 декабря 2018

Во-первых, у вас должна быть одинаковая модель с тем же именем свойства на стороне сервера.Таким образом, свойство, которое вы отправляете в объекте из angularjs, будет привязано к свойствам модели.Вместо заголовков: {'Content-Type': 'application / x-www-form-urlencoded'} , измените его на заголовки: {'Content-Type': 'application / json'} для веб-API.

Для справки я делюсь этой ссылкой CRUD с ANGULARJS и ASP.NET WEB API

...