2015-08-28 51 views
0

我找不到爲什麼以下調用我的「GetBatch」webapi方法不起作用。我不確定是否需要指定路由等。我確實有其他HttpPost方法,但請注意,我特別試圖調用我在下面定義的方法。C#WebAPI - 在Model中調用POST方法作爲參數

我能做些什麼來解決? URL應該是正確的,因爲不同的動作被調用。感謝您的時間。

的Javascript:

var accountGetBatchURL = '@HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")api/Account/GetBatch'; 

function() { 
    'use strict'; 
    var lastColumns = oTable.context[0].aoColumns; 
    var lastSearch = oTable.context[0].aoPreSearchCols; 
    var suppliedSearchParameters = new Array(); 
    for (var i = 0; i < lastSearch.length; ++i) { 
     if (lastSearch[i].sSearch !== "") { 
      suppliedSearchParameters.push({ "column": lastColumns[i].mData, "value": lastSearch[i].sSearch }); 
     } 
    } 
    var dataToSend = { 'searchParameters': suppliedSearchParameters }; 
    $.ajax({ 
     url: accountGetBatchURL, 
     type: 'POST', 
     cache: false, 
     contentType: 'application/json', 
     dataType: 'json', 
     data: JSON.stringify(dataToSend), 
     error: function (jqXHR, textStatus, errorThrown) { 
      bootbox.alert("There was a problem with sending the search parameters to the service for processing. Extended information: Error Number: " + textStatus + " Error Thrown: " + errorThrown); 
     }, 
     success: function (json) { 
      bootbox.alert("Successfully sent search parameters to LMS Search service!") 
     } 
    }); 
} 

C#型號代碼:

public class AccountSearchDTO 
{ 
    public AccountSearchParameterDTO[] searchParameters { get; set; } 
} 

public class AccountSearchParameterDTO 
{ 
    public string column { get; set; } 
    public string value { get; set; } 
} 

public class AccountSearchResultsDTO 
{ 
    public int numOfRows { get; set; } 
} 

C#賬戶控制器代碼「:

[HttpPost] 
public AccountSearchResultsDTO GetBatch([FromBody] AccountSearchDTO param) 
{ 
    AccountSearchResultsDTO results = new AccountSearchResultsDTO(); 
    results.numOfRows = 0; 
    return results; 
} 

編輯:嘗試了以下變化我dataToSend變量,通過我的AJAX請求發送,但我仍然收到「404」錯誤:

var dataToSend = { 'param': { 'searchParameters': suppliedSearchParameters} }; 

回答

0

嘗試發送數據等

data: dataToSend 

代替

data: JSON.stringify(dataToSend) 

如果這不起作用,你如何確保請求 「不工作」?你看到什麼反應?

更新:

我也看到你構建你的數據,如:

{ 'searchParameters': suppliedSearchParameters } 

但希望在你的行動名爲 「參數」 的參數:

public AccountSearchResultsDTO GetBatch([FromBody] AccountSearchDTO param) 

能你嘗試將數據包裝在一個名爲param的屬性中?

var dataToSend = { 'param': { 'searchParameters': suppliedSearchParameters } }; 
+0

我想你的建議;看到我上面的'$ .ajax()'參數,但仍然沒有成功。我收到以下錯誤信息:'{「消息」:「沒有HTTP資源發現,請求URI‘[[URL] /帳號/ GetBatch’匹配。「,」MessageDetail「:」在控制器'Account'上找不到與'GetBatch'名稱匹配的操作。「} –

+0

請參閱我的更新回答 –

+0

感謝您的幫助;仍然出現同樣的錯誤。工作到同一個控制器,所以我不知道我做錯了什麼。 –

0

定義[FromBody]屬性的動作參數強制的WebAPI綁定的參數調用時,閱讀簡單的類型。 請參閱:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

由於您通過AccountSearchDTO類,因此這不適用於您。

因此:

[HttpPost] 
public AccountSearchResultsDTO GetBatch(AccountSearchDTO param) 
{ 
    AccountSearchResultsDTO results = new AccountSearchResultsDTO(); 
    results.numOfRows = 0; 
    return results; 
} 

只要你的URL指向正確的行動和你包裹中的數據正確地調用應該工作。

例子:

var data = { 'searchParameters': suppliedSearchParameters }; 

$.ajax({ 
    url: accountGetBatchURL, 
    type: 'POST', 
    contentType: 'application/json', 
    dataType: 'json', 
    data: "{ param:" + JSON.stringify(data) + "}", 
    ... 
}); 
相關問題