2014-03-12 37 views
2

剛剛開始使用WebApi並有多個問題。讀大量的信息,但可能缺少一些概念。從jquery向MVC 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) { 

          } 

現在這個服務,我已經把一個調試器上ChangePassword方法在WebAPi內,當我運行代碼..它不會得到命中,也沒有得到任何錯誤錯誤Functi在Ajax上。

注:: HTML頁面和WEBAPI都在同一個項目上。於是,他們就在這裏

+0

你能顯示'源'變量的定義/內容嗎? –

+0

下面的答案適合你嗎? – ssilas777

回答

0

你的源變量中沒有顯示的跨域問題,而應該是這種格式爲您changepassword功能:

用戶名,[FromBody]字符串新密碼,[FromBody]字符串舊密碼

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 /等,以滿足您的需求..

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;} 

    } 

或用戶獲取方法

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

} 

如果這回答了你的問題,請檢查對上左側。