Публикация с помощью js в api (asp.net core mvc)

Привет, я использую 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; }
}

Выложите также класс HandShakeDto

Max 03.09.2018 11:58

Ваша публикация в /Api/Hand, но ваш контроллер называется HandShakeController, а не HandController

user3559349 03.09.2018 12:00

Opps опечатка, я обновил его, извините.

Assaf Our 03.09.2018 12:04

И если вы хотите использовать этот метод, то это должен быть /Api/HandShake/Handshakes.

user3559349 03.09.2018 12:13

@StephenMuecke, я пробовал это раньше (и сейчас)> локальный: 44339 / Api / HandShake / HandShakes 404 ()

Assaf Our 03.09.2018 12:16

Каковы подробности ошибки? И есть ли у вас какие-либо определения маршрутов, которые могут на него повлиять?

user3559349 03.09.2018 12:18

@StephenMuecke Я получаю только> (ошибка jquery), он не попадает в контроллер (точка останова) ошибка jquery> xhr.send (options.hasContent && options.data || null); И я не писал никаких маршрутов в своем проекте - Тем не менее

Assaf Our 03.09.2018 12:23

@StephenMuecke, вы совершенно правы, проблема в том, что "пакет microsoft.aspnet.webApi.core 5.2.6 был восстановлен с использованием .NetFramwork, версия v.6.1, установленная на целевой фреймворк проекта NetCoreApp, версия v2.1" Любые известные обходные пути ?

Assaf Our 03.09.2018 15:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
189
1

Ответы 1

Попробуйте заменить $.post("/Api/Hand/", { QuettaOfferId: button.attr("data-QuettaOfferId") }) По $.post("/Api/HandShake/", { QuettaOfferId: button.attr("data-QuettaOfferId") })

поскольку имя вашего контроллера api - HandShakeController

Код обновляется с помощью рукопожатия> POST локальный: 44339 / Api / HandShake 400 ()

Assaf Our 03.09.2018 12:12

В вашем контроллере api попробуйте изменить public IActionResult HandShakes(HandShakeDto dto) на public IActionResult Post(HandShakeDto dto)

Ahmed Helmy 03.09.2018 13:31

Или в вашем javascript попробуйте изменить $.post("/Api/HandShake/", { QuettaOfferId: button.attr("data-QuettaOfferId") }) на $.post("/Api/HandShake/Handshakes", { QuettaOfferId: button.attr("data-QuettaOfferId") }), чтобы использовать метод в контроллере api

Ahmed Helmy 03.09.2018 13:32

Правильно ли вы зарегистрировали зависимости контроллера? public HandShakeController(ApplicationDbContext context ,UserManager<IdentityUser> userManager/*, IHostingEnvironment environment*/)

Ahmed Helmy 03.09.2018 15:03

спасибо за вашу помощь, но: stackoverflow.com/questions/52151411/…

Assaf Our 03.09.2018 16:12

Другие вопросы по теме