Javascript Web API控制器操作参数始终为空
我确实看到一些线程在这里处理类似的问题,但不幸的是,没有什么可以解决我的问题(到目前为止) 控制器方法 以下是我的控制器方法:Javascript Web API控制器操作参数始终为空,javascript,c#,ajax,asp.net-core,asp.net-web-api2,Javascript,C#,Ajax,Asp.net Core,Asp.net Web Api2,我确实看到一些线程在这里处理类似的问题,但不幸的是,没有什么可以解决我的问题(到目前为止) 控制器方法 以下是我的控制器方法: [EnableCors(“AllowAll”)] [路由属性(“搜索簿”)] [HttpGet(“searchbooks/{key}”)] 公共异步任务搜索簿(字符串键) { 使用(var cmd=_ctx.Database.GetDbConnection().CreateCommand()) { cmd.CommandText=“SearchBooks”; cmd.C
[EnableCors(“AllowAll”)]
[路由属性(“搜索簿”)]
[HttpGet(“searchbooks/{key}”)]
公共异步任务搜索簿(字符串键)
{
使用(var cmd=_ctx.Database.GetDbConnection().CreateCommand())
{
cmd.CommandText=“SearchBooks”;
cmd.CommandType=CommandType.storedProcess;
Add(新的SqlParameter(“@Key”,SqlDbType.NVarChar){Value=Key});
if(cmd.Connection.State==ConnectionState.Closed)
cmd.Connection.Open();
var retObj=新列表();
使用(var dataReader=await cmd.ExecuteReaderAsync())
{
while(等待dataReader.ReadAsync())
{
//ExpandoObject的命名空间:System.dynamic
var dataRow=new ExpandoObject()作为IDictionary;
对于(变量iFiled=0;iFiled
当我检查控制台的输出时,它说
失败:Microsoft.AspNet.Server.Kestrel[13]
应用程序引发了未处理的异常。System.Data.SqlClient.SqlException(0x80131904):过程或函数“SearchBooks”需要未提供的参数“@Key”
我在本地创建了另一个网站,专门测试CORS问题(效果很好)。我通过AJAX
以以下方式调用上述方法:
$.ajax({
类型:“POST”,
url:“http://localhost:5000/api/bookstore/SearchBooks",
数据:{'key':'van'},
数据类型:“json”,
contentType:“应用程序/json”,
成功:功能(res){
$(“#回复”).html(res);
},
错误:函数(err){
}
});
问题是控制器方法SearchBooks
中参数key
的值总是null
但是如果我创建一个模型
(如下)
型号
公共类SearchViewModel{
公共字符串搜索键{get;set;}
}
然后,如果我修改我的AJAX
将值传递给这个模型,就像下面所说的那样,一切正常
var搜索模型={
钥匙:“面包车”
}
$.ajax({
类型:“POST”,
数据:JSON.stringify(searhModel),
url:“http://localhost:5000/api/bookstore/searchbooks",
contentType:“应用程序/json”,
成功:功能(res){
$(“#回复”).html(res);
},
错误:函数(err){
}
});
请帮忙 当参数具有[FromBody]时,Web API使用内容类型标头选择格式化程序
public async Task<object> SearchBooks([FromBody]string key){
}
公共异步任务搜索簿([FromBody]字符串键){
}
请在ajax调用中使用键入:“GET”
你的url应该是这样的
url:http://localhost:5000/api/bookstore/SearchBooks/van“
最后删除数据
最终代码:
$.ajax({
type: "GET",
url: "http://localhost:5000/api/bookstore/SearchBooks/van",
dataType: 'json',
contentType:"application/json",
success: function (res) {
$("#response").html(res);
},
error: function (err) {
}
});
根据您的问题,您的json格式似乎无效,当您使用stringify时,它会生成有效的json,因此工作正常。因此,在ajax调用中尝试从“key”中删除Qout。e、 g
<script type='text/javascript'>
$.ajax({
type: "POST",
url: "http://localhost:5000/api/bookstore/SearchBooks",
data: { key: 'van' },
dataType: 'json',
contentType:"application/json",
success: function (res) {
$("#response").html(res);
},
error: function (err) {
}
});
</script>
$.ajax({
类型:“POST”,
url:“http://localhost:5000/api/bookstore/SearchBooks",
数据:{key:'van'},
数据类型:“json”,
contentType:“应用程序/json”,
成功:功能(res){
$(“#回复”).html(res);
},
错误:函数(err){
}
});
您能否至少尝试正确格式化您的代码?您的第一个块不可读。尝试重新格式化第一个代码段,但它看起来仍然不太整洁:(很抱歉,我编辑了一点,@NiladriSarkarThanks很多。它现在看起来很漂亮!在您的第二次尝试中,您应该有var searchModel={searchKey:'van'}
在javascript中。然后,由于您发送的是json,请使用动作方法签名公共异步任务SearchBooks([FromBody]SearchViewModel){
如@Santosh的答案所示。@CodeCaster:更新了答案实际上我尝试了[FromBody]
已经存在,但这对我不起作用。@NiladriSarkar:你能在调试模式下点击SearchBooks方法吗?@NiladriSarkar:看起来是数据库问题而不是webapi问题这不是数据库问题,因为从JavaScript
绑定模型并将其作为JSON.stringify(model)传递
工作正常。问题是当我传递像数据:{'key':'van'}
这样的参数时。