Я написал следующий код для вызова API из клиентского скрипта.
Cshtml
<button class = "btn btn-link btn-sm js-toggleFollowing" data-user-id = "@gig.ArtistId">Follow</button>
Вызов API:
$(".js-toggleFollowing").click(function (e)
{
var button = (e.target);
$.post("/api/followings", { followeeId: button.attr("data-user-id") })
.done(function ()
{
button.text("Following");
})
.fail(function ()
{
alert("Something failed");
})
});
Метод контроллера API
// Code for api call
[HttpPost]
public IHttpActionResult Follow(FollowingDto dto)
{
var userId = User.Identity.GetUserId();
if (_context.Followings.Any(f => f.FolloweeId == userId && f.FolloweeId == dto.FolloweeId.ToString()))
return BadRequest("The Following alreday exists.");
var following = new Following
{
FollowerId = dto.FolloweeId.ToString(),
FolloweeId = userId
};
_context.Followings.Add(following);
_context.SaveChanges();
return Ok();
}
Класс DTO:
public class FollowingDto
{
public int FolloweeId { get; set; }
}
Вызов API работает с почтальоном без преобразования параметра в DTO. Но это не работает, когда я использую dto в качестве параметра. Класс dto также копируется.
Пожалуйста, помогите мне решить эту проблему.
что значит не умеет звонить? какая-нибудь ошибка? Можете ли вы сделать журнал внутри кнопки и внутри ajax? n также откройте консоль разработчика, проверьте вкладку сети, сработал ли щелчок?
Обычно параметры сообщения отправляются через тело запроса, поэтому вы должны добавить [FromBody], чтобы убедиться, что он будет правильно отображен public IHttpActionResult Follow([FromBody] FollowingDto dto)
Вам не хватает $, здесь var button = (e.target); перед открытой скобкой.
@Hooman Спасибо за ответ. Теперь вызов сработал, но в классе контроллера FolloweeId был равен нулю. Как followeeId будет преобразован в FollowDto. Что еще мне не хватает в коде?
ваша кнопка должна быть объектом jQuery, прежде чем вы сможете использовать функцию attr (). попробуйте это: var button = $ (e.target). Это то, что вам сказал Муса.
@Hooman Большое спасибо.
Спасибо всем за ценные комментарии.

Вы включили случай верблюда? Где ваша карта маршрута? / api / followings?