Ответ 1
С#
public class ValuesController : ApiController
{
// POST api/values
[HttpPost] // added attribute
public IHttpActionResult Post([FromBody] string filterName) // added FromBody as this is how you are sending the data
{
return new JsonResult<string>(filterName, new JsonSerializerSettings(), Encoding.UTF8, this);
}
JavaScript
$.ajax(
{
url: "/api/Values/", // be consistent and case the route the same as the ApiController
type: "POST",
dataType: 'json',
data: "=Dirty Deeds", // add an = sign
success: function (result) {
console.log(result);
},
error: function (xhr, status, p3, p4) {
var err = "Error " + " " + status + " " + p3;
if (xhr.responseText && xhr.responseText[0] == "{")
err = JSON.parse(xhr.responseText).message;
console.log(err);
}
});
объяснение
Поскольку вы отправляете только одно значение, добавьте перед ним знак =, чтобы он обрабатывался как кодировка форм. Вы также можете добавить тип контента, если хотите четко указать, что именно это вы делаете с вызовом ajax.
contentType: 'application/x-www-form-urlencoded'
В качестве альтернативы вы также можете отправить контент через URL-адрес или обернуть контент в объекте на сервере, а также в вызове ajax и подстроить его.
public class Filter {
public string FilterName {get;set;}
}
public class ValuesController : ApiController
{
// POST api/values
[HttpPost] // added attribute
public IHttpActionResult Post([FromBody] Filter filter) // added FromBody as this is how you are sending the data
{
return new JsonResult<string>(filter.FilterName, new JsonSerializerSettings(), Encoding.UTF8, this);
}
JavaScript
$.ajax(
{
url: "/api/Values/", // be consistent and case the route the same as the ApiController
type: "POST",
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({FilterName: "Dirty Deeds"}), // send as json
success: function (result) {
console.log(result);
},
error: function (xhr, status, p3, p4) {
var err = "Error " + " " + status + " " + p3;
if (xhr.responseText && xhr.responseText[0] == "{")
err = JSON.parse(xhr.responseText).message;
console.log(err);
}
});