从jquery将多个参数传递给MVC Web APi

时间:2014-03-12 09:41:40

标签: jquery asp.net-web-api

刚开始使用WebApi并遇到多个问题。阅读大量信息,但可能缺少一些概念。

在我的控制器中:

[HttpPost]
[ActionName("ChangePassword")]
public string ChangePassword([FromBody]string username, [FromBody] string newpassword, [FromBody]string oldpassword)
{
    return new Models.User() { Username = username, NewPassword = newpassword, OldPassword = oldpassword }.ChangePassword();

}

路由::

config.Routes.MapHttpRoute(
name: "DefaultApiController",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);

我正在从JQUERY调用此服务

 $.ajax({
                            type: "POST",
                            url: "http://XXXXX/api/service/cHANGEPASSWORD",
                            async: true,
                            data: source,
                            success: function (result) {
                                alert(result);
                            },
                            error: function (jqXHR, exception) {

                            }

现在,我已经在WebAPi中安装了一个调试器,并且当我运行代码时...它没有被命中,而且我也没有从Ajax中获得任何错误错误函数。

注意:: HTML页面和WEBAPI都在同一个项目中。所以,他们在这里没有跨域问题

2 个答案:

答案 0 :(得分:0)

您的源变量未显示,但更改密码函数的格式应为:

username,[FromBody] string newpassword,[FromBody] string oldpassword

var source = { username : $('#username').val(), newpassword : $('#newPassword').val(), oldpassword: $('#oldPassword').val() };

                   $.ajax({
                    type: "POST",
                    url: "http://XXXXX/api/service/ChangePassword",
                    async: true,
                    data: source,
                    success: function (result) {
                        alert(result);
                    },
                    error: function (jqXHR, exception) {

                    }

您可以更改项目ID / etc以满足您的需求..

答案 1 :(得分:0)

创建重置密码视图模型发布通过请求

传输数据时这是安全的
 [HttpPost]
[ActionName("ChangePassword")]
public string ChangePassword(RestPasswordViewModel vm)
{
    return new Models.User() { Username = vm.username, NewPassword = vm.newpassword, OldPassword = vm.oldpassword }.ChangePassword();

}





 public class RestPasswordViewModel 
    {
     public string username {get;set;}

     [DataType(DataType.Password)]
     public string newpassword{get;set;}

     [DataType(DataType.Password)]
     public string oldpassword {get;set;}

    }

OR用户获取方法

[HttpGet]
[ActionName("ChangePassword")]
public string ChangePassword(string username, string newpassword,string oldpassword)
{
    return new Models.User() { Username = username, NewPassword = newpassword, OldPassword = oldpassword }.ChangePassword();

}

如果这回答了您的问题,请在左侧检查。