Reza kavian Ответов: 2

Я не могу отправить данные в api по httppost через ajax


если я тип "контроллер/действие" данных в URL отправить корректно,но когда хочу отправить данные на данные данные API отправить ноль в параметре метода

var urll = 'https://localhost:44337/api/apiialbums/GetAlbum';  
 $.ajax({
                
                type: "post",               
                url: urll, error: function () { alert("errore") },
                data:{id:25,x:2},
                success: function (dataa) {
                    alert("okk");
}
})


мой код класса api:

[HttpPost]
        public async Task<ActionResult<Album>> GetAlbum(int id,int x)
        {
            var album = await _context.Albums.FindAsync(id);

            if (album == null)
            {
                return NotFound();
            }
            return album;    
        }


Что я уже пробовал:

я могу отправлять данные по url-адресу и не использовать данные:{id:25,x:2}, которые
в этом случае идентификатор,х отправить корректно.

var urll = 'https://localhost:44337/api/apiialbums/GetAlbum?id=25&x=3';  
 $.ajax({
                
                type: "post",               
                url: urll, error: function () { alert("errore") },
              //  data:{id:25,x:2},
                success: function (dataa) {
                    alert("okk");
}
})


и в моем методе ipa используйте [httppost]
[HttpPost]
        public async Task<ActionResult<Album>> GetAlbum(int id,int x)
        {
            var album = await _context.Albums.FindAsync(id);

            if (album == null)
            {
                return NotFound();
            }
            return album;    
        }


как использовать data:{id:25,x:2} вместо отправки данных в url?

2 Ответов

Рейтинг:
6

Reza kavian

i use [FromForm] for method parameter:
[HttpPost]
        public async Task<ActionResult<Album>> GetAlbum([FromForm] int id,[FromForm] int x)
        {
            var album = await _context.Albums.FindAsync(id);

            if (album == null)
            {
                return NotFound();
            }
            return album;    
        }

по умолчанию используется [FromQuery]. [FromQuery] вызывает считывание значения параметра из url-адреса, но [FromForm] вызывает считывание значения из данных:{id:25,x:2} в коде ajax


Рейтинг:
1

F-ES Sitecore

Взгляните на этот для обсуждения параметров связывания с поста

Привязка параметров в Web API[^]

Самое простое решение-иметь класс, представляющий ваши параметры

public class GetAlbumParams
{
    public int id { get; set; }
    public int x { get; set; }
}


Затем измените свой метод, чтобы использовать его

public async Task<ActionResult<Album>> GetAlbum(GetAlbumParams albumParams)