Javascript C#WebAPI-以模型为参数在控制器内调用POST方法
我不明白为什么下面对我的“GetBatch”webapi方法的调用不起作用。我不确定是否需要指定路由等。我确实有其他HttpPost方法,但请注意,我特别尝试调用我在下面定义的方法 我能做些什么来修复?URL应该是正确的,因为会调用不同的操作。谢谢你抽出时间 Javascript:Javascript C#WebAPI-以模型为参数在控制器内调用POST方法,javascript,c#,asp.net-web-api,Javascript,C#,Asp.net Web Api,我不明白为什么下面对我的“GetBatch”webapi方法的调用不起作用。我不确定是否需要指定路由等。我确实有其他HttpPost方法,但请注意,我特别尝试调用我在下面定义的方法 我能做些什么来修复?URL应该是正确的,因为会调用不同的操作。谢谢你抽出时间 Javascript: var accountGetBatchURL = '@HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/
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#账户控制员代码:
编辑:尝试对通过AJAX请求发送的dataToSend变量进行以下更改,但仍然出现“404”错误:
试着像这样发送数据
data: dataToSend
而不是
data: JSON.stringify(dataToSend)
如果这不起作用,您如何确保请求“不起作用”?您看到了什么响应
更新:
我还看到您正在构建数据,如:
{ 'searchParameters': suppliedSearchParameters }
但在操作中需要名为“param”的参数:
public AccountSearchResultsDTO GetBatch([FromBody] AccountSearchDTO param)
能否尝试将数据包装到名为param的属性中
var dataToSend = { 'param': { 'searchParameters': suppliedSearchParameters } };
将
[FromBody]
属性定义到action参数会强制WebAPI在将参数绑定到调用时读取简单类型。
见:
这不适用于您,因为您正在将类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) + "}",
...
});
我尝试了您的建议;请参阅上面的
$.ajax()
参数,但仍然没有成功。我收到以下错误消息:{“message”:“未找到与请求URI“[[URL]]/Account/GetBatch.”匹配的HTTP资源”,“MessageDetail”:“未在与名称“GetBatch.”匹配的控制器“Account”上找到任何操作。”
谢谢您的帮助;仍然是相同的错误。我的其他方法调用对同一控制器有效,因此我不确定我做错了什么。
var dataToSend = { 'param': { 'searchParameters': suppliedSearchParameters } };
[HttpPost]
public AccountSearchResultsDTO GetBatch(AccountSearchDTO param)
{
AccountSearchResultsDTO results = new AccountSearchResultsDTO();
results.numOfRows = 0;
return results;
}
var data = { 'searchParameters': suppliedSearchParameters };
$.ajax({
url: accountGetBatchURL,
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: "{ param:" + JSON.stringify(data) + "}",
...
});