Сбой с кодом 405 при использовании axios для вызова API-интерфейса контроллера в приложении ядра реагировать asp.net - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над простым базовым приложением реагировать + asp.net, в котором я хочу просто добавить записи в базу данных (созданную с использованием ядра entityframework).Существует очень простая форма с просто текстовым полем и кнопкой.При нажатии на кнопку я получаю следующую ошибку:

Ошибка: запрос не выполнен с кодом состояния 405

Я выполнил отладку во время выполнения и метод Create в контроллерекласс не вызывается.То есть аксиос как-то не распознает предоставленный URL.Ниже приведен код на стороне клиента:

class Form extends Component {

    state = { rubricName: '' }

    handleFormSubmit = (event) => {
        event.preventDefault();           

        axios({
            method: 'post',
            url: 'api/Rubric/Create',
            data: {
                title: this.state.rubricName,
            },
            headers: {
                'Content-Type': 'text/plain;charset=utf-8',
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,PATCH,OPTIONS',
            },
        }).then(function (response) {
            console.log(response);
        }).catch(function (error) {
            console.log(error);
        });

Вот класс API контроллера:

[Route("api/[controller]")]
public class RubricController : Controller
{
    RubricDataAccessLayer objRubric = new RubricDataAccessLayer();


    [HttpPost]
    [Route("api/Rubric/Create")]
    public int Create(string title)
    {
        return objRubric.AddRubric(new Rubric { Title = title });
    }
}

Есть идеи о том, почему у меня возникает эта ошибка?

1 Ответ

1 голос
/ 03 апреля 2019

Вы указали неверный URL в запросе.Если на контроллере имеется только один атрибут Route, то URL должен быть

api/Rubric

. Если вы сохраняете оба URL-адреса, итоговый URL-адрес представляет собой объединенное значение Route атрибутов

api/Rubric/api/Rubric/Create

ЕслиВы хотите переопределить URL-адрес действия, не комбинируя его с контроллером, просто добавьте ведущий / (или ~/)

[HttpPost]
[Route("/api/Rubric/Create")]
public int Create(string title)

В этом случае URL-адрес запроса должен быть

api/Rubric/Create
...