首页 > 解决方案 > 如何接收和处理 AngularJS HTTP POST 到 C#?

问题描述

我正在开发一个与 SQL 数据库和 Azure Web 应用程序关联的网站。该应用程序支持身份验证。现在,我可以使用 Owin OAuthAuthorizationServerProvider 类登录用户。

这是我用来从 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 context)。

这完美地工作。我现在正在尝试基于相同的结构创建一个“登录”页面。

我想我知道如何使用 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# 的任何想法,最好是?

标签: c#htmlangularjsazure-webapps

解决方案


首先,您应该在服务器端具有相同属性名称的模型。这样您从 angularjs 在对象中发送的属性将绑定到模型属性。不要使用 headers: { 'Content-Type': 'application/x-www-form-urlencoded' },而是将其更改为 headers: { 'Content-Type': 'application/json' }用于 Web API。

供您参考,我正在 与 ANGULARJS 和 ASP.NET WEB API 共享此链接 CRUD


推荐阅读