2017-05-08 54 views
0

我們正在移動我們的服務器端邏輯,以通過API調用。我無法從我的AJAX調用中觸發該操作。任何人都可以告訴我什麼是我的代碼錯誤,爲什麼我得到一個錯誤,說它無法在控制器中找到操作?無法從AJAX發佈請求中觸發API控制器操作

控制器動作

[System.Web.Http.HttpPost]  
public HttpResponseMessage assignViews(string selectedViews, string volIds) 
{ 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

AJAX請求

self.saveViews = function() { 

     var data = { 
      selectedViews: self.selectedViews().toString(), 
      volIds: populateSelectedVolIds().toString() 
     }; 

     var jsonData = ko.toJSON(data); 

     $.ajax({ 
      url: "../../ja/ClientView/assignViews", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      cache: false, 
      data: jsonData, 
      success: handleViewsForClientSuccess, 
      error: handleEditViewsErrors 
     }); 
};   

路由

public override void RegisterArea(AreaRegistrationContext context) 
    {   
     RouteTable.Routes.MapHttpRoute(
      "ja", 
      "ja/{controller}/{id}", 
      new { action = "Index", id = UrlParameter.Optional, version = UrlParameter.Optional } 
     ); 
    } 
+0

[1]你的網址應該是「../../ja/ClientView」所以不要不包括assignViews(動作名稱),因爲它不是你路由的一部分。 [2]最佳做法是使用模型而不是字符串作爲參數。如果您使用模型,則綁定將正常工作。另一個選擇是使用[FromBody]屬性。 –

+0

關閉操作名稱無效。我將嘗試創建一個模型對象並將其設置爲參數。希望這會起作用。 –

+0

創建一個模型就像一個魅力。請讓這個答案,我可以接受它。謝謝你的幫助! –

回答

0

[1]從URL

刪除操作名稱,不要在您的網址包括操作名稱,因爲它不是你的路由的一部分。 HTTP動詞POST將查找您的操作,因爲您使用此VERB標記了操作,並且您的ajax請求是POST請求。您的網址應該是:

url: "../../ja/ClientView"

[2]使用一個模型參數

最佳做法是使用模型來代替字符串作爲參數,爲您的操作。例如,你在代碼中創建這種模式:

public class MyModel 
{ 
    public string selectedViews { get; set; } 
    public string volIds { get; set; } 
} 

,改變你的操作是這樣的:

[System.Web.Http.HttpPost] 
public HttpResponseMessage assignViews(MyModel data) 
{ 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 
0

在路線r您錯過了添加Action佔位符的註冊,而您默認將其標記爲「Index」,這意味着您的ajax調用將嘗試與ActionMethod「Index」匹配。嘗試將其更改爲

ja/{controller}/{action}/{id} 

另一個原因可能是參數不匹配。

+0

「Message」:「找不到與請求URI'http:// localhost:8088/ja/ClientView/assignViews'。」,「MessageDetail」匹配的HTTP資源:「在控制器'ClientView'上未找到任何操作匹配請求。「 –

+0

^^^^仍然gettting這個錯誤 –

+0

@DeanFriedland - 這將是有益的,如果你可以添加完整的控制器代碼 – Gururaj

相關問題