Timur2342
@Timur2342

От чего появляется 405 http code?

View

<form asp-controller="Registration" asp-action="RegistrationPostAsync">
    <div>
        <label asp-for="Name"></label>
        <input asp-for="Name" />
    </div>
    <div>
        <label asp-for="Email"></label>
        <input asp-for="Email" />
    </div>
    <div>
        <label asp-for="Password"></label>
        <input asp-for="Password" />
    </div>
    <div>
        <label asp-for="PhoneNumber"></label>
        <input asp-for="PhoneNumber" />
    </div>
    <div>
        <label asp-for="Remember"></label>
        <input asp-for="Remember" />
    </div>
    <input type="submit" />
</form>



Action

[HttpPost]
[Route("{name}/{email}/{password}/{phoneNumber?}")]
public async Task<IActionResult> RegistrationPostAsync(RegistrationModel model)
{
    // code...
}



В теории action должен быть "/LoginController/Login", а после отправки формы должен работать как раз выбранный action.
В реале на выходе получаю это:
6640cb4b84780116762475.png и после отправки формы получаю 405 код.
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Форма отправляется в теле, а ты хочешь ее передать через путь.
Тег action у form - статический, он не меняется (js тут нет), поэтому он должен быть известен с самого начала.

Тут 2 решения:
1. Переделывай все под js (сам все вставляй и прописывай)
2. Измени способ передачи формы: путь статический (без параметров пути подставляемых), а форма через [FromForm]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Если у вас экшен (endpoint) на сервере помечен как HttpGet, а вы отправляете HttpPost запрос. Наоборот так же работает, если отправляете HttpGet запрос на эндпоин, который принимает HttpPost запросы.

Либо если вы пытаетесь отправить запрос куда-то, где нет принимающего экшена. В вашем случае, после билда формы, у вас не указал экшен. Значит запрос отправляется на стандартынй роут контроллера, на котором у вас нет экщена.

Второй момент, не используйте для отправки формы, это уже застарелая штука и не очень эффективная. Лучше используйте отправку через Java Script или Ajax

Ещё UPD. Вы указываете роут для вашего эндпоинты. Если вы используете asp.net core MVC, лучше его убрать, т.к. он вам не нужен для отправки через форму. Скорее всего именно эта штука и сбивает отправку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы