Привет, я использую DTO для одного значения (Id) и пытаюсь отправить сообщение в Db с помощью ApiController, но при нажатии кнопки я продолжаю получать ошибку 400, которая отсылает меня к ошибке xhr.send. (я использую asp.net core 2.1) Код: @section Scripts {
<script type = "text/javascript">
$(document)
.ready(function() {
$(".js-toggle-HandShake")
.click(function(e) {
var button = $(e.target);
console.info(button.attr("data-QuettaOfferId")); //Value=24 >> OK
$.post("/Api/HandShake/", { QuettaOfferId: button.attr("data-QuettaOfferId") })
// Error in > POST https://localhost:44339/Api/HandShake/ 400 () &
//in jquery>> xhr.send( options.hasContent && options.data || null );
.done(function() {
button
.text("Chousen");
})
.fail(function() {
alert("Something failed");
});
});
});
</script>
} & код ApiController
[Microsoft.AspNetCore.Mvc.Route("api/[controller]")]
[ApiController]
[Microsoft.AspNetCore.Authorization.Authorize]
public class HandShakeController : ControllerBase
{
private readonly ApplicationDbContext _context;
private readonly UserManager<IdentityUser> _userManager;
// private readonly IHostingEnvironment hostingEnvironment;
public HandShakeController(ApplicationDbContext context ,UserManager<IdentityUser> userManager/*, IHostingEnvironment environment*/)
{
_context = context;
_userManager = userManager;
//hostingEnvironment = environment;
}
[Microsoft.AspNetCore.Mvc.HttpPost]
// public IHttpActionResult HandShakes(HandShakeDto dto)
public IActionResult HandShakes(HandShakeDto dto)
{
var userId = _userManager.GetUserId(User);
var check = _context.Quetta.Where(u => u.SiteUserId == userId);
if ( _context.handShakes.Any(f => f.QuettaOfferId == dto.QuettaOfferId))
return BadRequest("Some error Msg");
if (check.Any())
{
var hand = new HandShake
{
QuettaOfferId = dto.QuettaOfferId
};
try
{
_context.handShakes.Add(hand);
_context.SaveChangesAsync();
return Ok();
}
catch (Exception e)
{
Console.WriteLine(e);
return BadRequest("Some error Msg");
}
}
else{
return BadRequest("");}
// Check if the user id that publish the ed = login user.
//if so add the offer to selected table,
}
}
Я использую asp.net core 2.1 и сильно подозреваю, что проблема в ApiController, но я не уверен.
DTO
public class HandShakeDto
{
public int QuettaOfferId { get; set; }
}
Ваша публикация в /Api/Hand, но ваш контроллер называется HandShakeController, а не HandController
Opps опечатка, я обновил его, извините.
И если вы хотите использовать этот метод, то это должен быть /Api/HandShake/Handshakes.
@StephenMuecke, я пробовал это раньше (и сейчас)> локальный: 44339 / Api / HandShake / HandShakes 404 ()
Каковы подробности ошибки? И есть ли у вас какие-либо определения маршрутов, которые могут на него повлиять?
@StephenMuecke Я получаю только> (ошибка jquery), он не попадает в контроллер (точка останова) ошибка jquery> xhr.send (options.hasContent && options.data || null); И я не писал никаких маршрутов в своем проекте - Тем не менее
@StephenMuecke, вы совершенно правы, проблема в том, что "пакет microsoft.aspnet.webApi.core 5.2.6 был восстановлен с использованием .NetFramwork, версия v.6.1, установленная на целевой фреймворк проекта NetCoreApp, версия v2.1" Любые известные обходные пути ?





Попробуйте заменить
$.post("/Api/Hand/", { QuettaOfferId: button.attr("data-QuettaOfferId") })
По
$.post("/Api/HandShake/", { QuettaOfferId: button.attr("data-QuettaOfferId") })
поскольку имя вашего контроллера api - HandShakeController
Код обновляется с помощью рукопожатия> POST локальный: 44339 / Api / HandShake 400 ()
В вашем контроллере api попробуйте изменить public IActionResult HandShakes(HandShakeDto dto) на public IActionResult Post(HandShakeDto dto)
Или в вашем javascript попробуйте изменить $.post("/Api/HandShake/", { QuettaOfferId: button.attr("data-QuettaOfferId") }) на $.post("/Api/HandShake/Handshakes", { QuettaOfferId: button.attr("data-QuettaOfferId") }), чтобы использовать метод в контроллере api
Правильно ли вы зарегистрировали зависимости контроллера? public HandShakeController(ApplicationDbContext context ,UserManager<IdentityUser> userManager/*, IHostingEnvironment environment*/)
спасибо за вашу помощь, но: stackoverflow.com/questions/52151411/…
Выложите также класс
HandShakeDto