В контроллере не установлен маршрут для /api/sitehit/LogHit
. ApiControllers не работают так же, как обычные контроллеры MVC. Имя действия не является маршрутом конечной точки, если вы не укажете его.
Вы можете добавить атрибут маршрута к действию контроллера.
[Route("LogHit")]
[HttpPost]
public void LogHit(string Page)
{
}
Или (при условии, что на контроллере нет других методов HttpPost) измените jQuery
url на url: '/api/sitehit'
.
Существует несколько способов привязки данных в зависимости от типа контента, который вы хотите отправить. Предполагая, что вы хотите использовать JSON, вы можете сделать что-то вроде следующего.
Создайте модель для привязки и добавьте [FromBody]
к параметру действия контроллера:
public class MyModelDto
{
public string Page { get; set; }
}
[Route("LogHit")]
[HttpPost]
public void LogHit([FromBody] MyModelDto model) // add FromBody here
{
// model.Page will contain "test"
}
Затем убедитесь, что вы отправляете JSON в вызове ajax, используя JSON.stringify()
для строкового преобразования данных.
$.ajax({
type: 'POST',
contentType: "application/json",
url: "/api/sitehit/LogHit",
data: JSON.stringify({Page: 'test'}), // use JSON.stringify()
dataType: 'json',
success: function (data) {
// can use response data here
alert("success logging hit");
},
error: function (msg) {
alert(msg.responsetext);
}
});
Теперь это должно правильно привязаться к вашему контроллеру.
Если вы отправляете данные формы x-www-form-urlencoded
, тогда используйте [FromForm]
, и вам не нужно использовать JSON.stringify()
, но в этом случае параметры следует отправлять в форме строки запроса: page=test&prop2=test2
.
Надеюсь, это поможет.