Я видел несколько потоков здесь, рассматривая аналогичную проблему, но, к сожалению, ничто не могло решить мою проблему (пока).Аргументы действия API-интерфейса API всегда равны нулю
CONTROLLER МЕТОД
Ниже мой метод контроллера:
[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>
Помогите!
Не могли бы вы хотя бы попытаться правильно отформатировать код? Ваш первый блок не читается. –
Хорошо. Дай мне попробовать. –
Попробовал переформатировать первый фрагмент кода, но он по-прежнему выглядит не очень аккуратно :(Извините за это –