Angular 控制器不使用 $http 将值传递给 web api 方法

Angular controller doesn't pass value to web api method with $http

这是我的 angularjs 代码:

var uname = resetPasswordRequestData.email
var request = $http({
    method: "post",
    url: workModule.config.Config.CommonUrl + "api/ResetPasswordRequest",
    data: uname
});

网络api代码:

public class PerformPasswordResetController : ApiController
{
    public int PerformResetPassword([FromBody]string uname)
    {
        CrmUser contact = null;
        if (ModelState.IsValid)
        {
            try
            {
                contact = new PasswordResetProvider().GetUserByName(uname);
            }
            catch (Exception ex)
            {
                return 1;
            }
        }
}

我的问题是,当我从 Fiddler 进行调用时,它可以正常工作,但是当我 运行 代码时,它很好地路由到网络 api 方法,但在网络 api 控制器中 "uname" 参数为空。当我从 fiddler 传递一些数据时,它将该数据传递给 "uname"(在网络中 api 控制器 uname 不为空)

谁能帮帮我?

我强烈建议您使用模型 class 在您的服务器上接收数据。

像这样:

public class UserModel {
    public string UserName { get; set; }
}

public class PerformPasswordResetController : ApiController
{
    public int PerformResetPassword([FromBody]UserModel user)
    {
        ...Do your stuff
    }
}

在您的 angular 代码上:

var model = {
    userName: resetPasswordRequestData.email
};

var request = $http({
    method: "post",
    url: workModule.config.Config.CommonUrl + "api/ResetPasswordRequest",
    data: model
});

此外,如果您不想(或不能)更改您的服务器代码,请试试这个:

var uname = resetPasswordRequestData.email
var request = $http({
    method: "post",
    url: workModule.config.Config.CommonUrl + "api/ResetPasswordRequest",
    data: {
        uname: uname
    }
});