我在這裏看到了一些線程來解決類似的問題,但不幸的是沒有任何東西可以解決我的問題(到目前爲止)。Web API控制器的動作參數始終爲空
控制器方法
以下是我的控制器方法:
[EnableCors("AllowAll")]
[RouteAttribute("SearchBooks")]
[HttpGet("searchbooks/{key}")]
public async Task<object> SearchBooks(string key)
{
using (var cmd = _ctx.Database.GetDbConnection().CreateCommand())
{
cmd.CommandText = "SearchBooks";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Key", SqlDbType.NVarChar) { Value = key });
if (cmd.Connection.State == ConnectionState.Closed)
cmd.Connection.Open();
var retObj = new List<dynamic>();
using (var dataReader = await cmd.ExecuteReaderAsync())
{
while (await dataReader.ReadAsync())
{
//Namespace for ExpandoObject: System.dynamic
var dataRow = new ExpandoObject() as IDictionary<string, object>;
for (var iFiled = 0; iFiled < dataReader.FieldCount; iFiled++)
dataRow.Add(dataReader.GetName(iFiled), dataReader[iFiled]);
retObj.Add((ExpandoObject)dataRow);
}
}
if (!retObj.Any())
return JsonConvert.SerializeObject("No matching record found");
else
return JsonConvert.SerializeObject(retObj);
}
}
當我檢查控制檯輸出它說
失敗:Microsoft.AspNet.Server.Kestrel [ 13] 應用程序拋出未處理的異常。 System.Data.SqlClient.SqlException(0x80131904):過程或函數'SearchBooks'需要未提供參數'@Key'。
我在本地創建了另一個網站,專門測試CORS問題(工作正常)。我打電話通過AJAX
上述方法以下列方式:
<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>
問題是爭論key
的控制方法的價值SearchBooks
總是null
!
但是,如果我創建了一個model
(下同)
模型
public class SearchViewModel{
public string SearchKey {get; set;}
}
,然後,如果我修改我AJAX
價值傳遞給該model
像之後,一切工作就好了!
<script type='text/javascript'>
var searchModel={
key: 'van'
}
$.ajax({
type: "POST",
data: JSON.stringify(searhModel),
url: "http://localhost:5000/api/bookstore/searchbooks",
contentType:"application/json",
success: function (res) {
$("#response").html(res);
},
error: function (err) {
}
});
</script>
請幫忙!
您能否至少嘗試正確格式化您的代碼?你的第一個塊是不可讀的。 –
好的。讓我嘗試。 –
試圖重新格式化第一個代碼片段,但它仍然看起來不太整潔:(對不起,這 –