Ошибка неверного запроса при вызове с jquery ajax на контроллер API ASP. net Core - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь вызвать API со страницы нажатием кнопки через ajax вызов. Проблема в том, что для GET & DELETE вызов работает, но для POST и PUT он говорит, что в отладчике firefox указан неправильный формат запроса.

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class JsonDataAPIController : ControllerBase
    {
        // GET: api/JsonDataAPI
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/JsonDataAPI/5
        [HttpGet("{id}", Name = "Get")]
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/JsonDataAPI
        [HttpPost]
        public void Post([FromBody] string value)
        {
             //check for value and do stuff
        }

        // PUT: api/JsonDataAPI/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE: api/ApiWithActions/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
}

вызов функции в html page

function apicall() {
        $.ajax({
            url: 'api/JsonDataAPI',
            type: 'POST',
            data: {value:'1234'},
            success: function (data) {
                console.log(data);
                console.log("success");
            },
            error: function () {
                console.log("error");
            }
        }).done(function () {
             //console.log("ajax");
        })
    }

В конечном итоге я хочу отправить JSON данные через ajax и работать в API. Я знаю, что если я не отправлю вызовы contenttype и datatypein ajax, он будет назначен автоматически. Тогда почему эти строковые данные не работают, я не могу получить. Почему в API есть ControllerBase? Разве это не APIController?

Кроме того, когда я пытался использовать Postman, API даже не вызывали. Если я пытаюсь получить доступ к API через URL в firefox, он может получить доступ к API GET, но когда тот же URL-адрес используется в POSTman, он говорит: «Не удалось получить ответ». Я не включил какую-либо аутентификацию при настройке проекта, а также в почтальоне, я правильно установил параметры (как без аутентификации), все равно от почтальона вызов не будет работать. Извините, но я изучаю, следовательно, так много вопросов. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Проблема в том, что для GET & DELETE вызов работает, но для POST и PUT он говорит, что в отладчике firefox указан неверный формат запроса.

Пожалуйста, попробуйте изменить свой код как показано ниже.

$.ajax({
    url: 'api/JsonDataAPI',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify('1234'),
    success: function (data) {
        console.log(data);
        console.log("success");
    },
    error: function () {
        console.log("error");
    }
}).done(function () {
        //console.log("ajax");
})
0 голосов
/ 18 января 2020

Это не имеет ничего общего с API. Поскольку вы передаете строковое значение как HTTP POST, вам необходимо использовать код javascript, например:

$.ajax(
{
    url: "/api/JsonDataAPI",
    type: "POST",
    dataType: 'json',
    data: "=1234", // add an = sign
    success: function (data) {
    console.log(data);
    console.log("success");
    },
    error: function () {        
        console.log('error');
    }
});
...