用模型作为参数在控制器中调用POST方法
C# WebAPI - Calling POST Method Within Controller with Model as Parameter
我不明白为什么下面调用我的"GetBatch" webapi方法不工作。我不确定是否需要指定路线等。我确实有其他的HttpPost方法,但请注意,我特别尝试调用下面定义的方法。
我能做些什么来修复?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# Account Controller Code":
[HttpPost]
public AccountSearchResultsDTO GetBatch([FromBody] AccountSearchDTO param)
{
AccountSearchResultsDTO results = new AccountSearchResultsDTO();
results.numOfRows = 0;
return results;
}
EDIT:尝试了以下更改我的dataToSend变量,这是通过我的AJAX请求发送的,但我仍然得到一个"404"错误:
var dataToSend = { 'param': { 'searchParameters': suppliedSearchParameters} };
尝试像
这样发送数据data: dataToSend
不是data: JSON.stringify(dataToSend)
如果这不起作用,你如何确保请求"不工作"?你看到了什么反应?
更新:
我也看到你正在构建你的数据:
{ 'searchParameters': suppliedSearchParameters }
但是期望在你的动作中有一个名为"param"的参数:
public AccountSearchResultsDTO GetBatch([FromBody] AccountSearchDTO param)
你可以尝试将你的数据包装在一个名为param的属性中吗?
var dataToSend = { 'param': { 'searchParameters': suppliedSearchParameters } };
将[FromBody]
属性定义为action参数强制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) + "}",
...
});
相关文章:
- 使用Ionic 2进行POST调用
- AngularJS$http.post调用返回502(坏网关)错误
- 使用restangular save方法调用put与post时的控件
- 从不同的脚本调用Post AngularJs
- 如何在fetch post调用后管理重定向请求
- 如果($_SERVER[“REQUEST_METHOD”]=“POST”)条件在ajax调用不同的php文件进行验证和提
- 将c#get方法a转换为post方法,从javascript调用
- 使用 PHP 生成的按钮生成 POST 请求,这些按钮调用带有参数的 javascript 函数
- AngularJS中的AJAX调用post方法
- 试图理解JQuery/AjaxGet/POST调用
- $.post投掷”;非法调用”;
- 404调用jQuery.post时出错
- $.post到PHP文件-在包含循环完成之前不会调用回调
- 如何调用 $.post 并设置内容类型多部分/表单数据数据
- 在 PHP 函数中调用 POST 变量
- "错误“;或“;失败”;在jQuery中调用$.post Ajax
- 从图像标签
使用jquery调用POST服务
- 使用Ajax在外部Rest API上调用post
- 用模型作为参数在控制器中调用POST方法
- 使用Jquery调用post时出现问题