Форма My Post не достигает метода действия внутри моего asp. net mvc основного веб-приложения - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над основным веб-приложением asp. net MVC, и у меня есть следующие правила маршрутизации: -

app.UseEndpoints(endpoints => {

                endpoints.MapControllerRoute(
                    name: "IP",
                    pattern: "IP/{controller=Home}/{action=Index}/{id?}");
            });
            app.UseEndpoints(endpoints => {

                endpoints.MapControllerRoute(
                    name: "Info",
                    pattern: "Info/{controller=Home}/{action=Index}/{id?}");
            });
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });

тогда внутри моей формы создания я определяю следующее: использовать другой URL-адрес при отправке формы обратно в зависимости от текущего URL-адреса: -

<form method="post" action="@(!Context.Request.Path.Value.ToString().ToLower().Contains("/info") ? "/IP/submissions/create/": "/info/submissions/create/")" >

и вот мой метод действия публикации: -

 [AllowAnonymous]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Submission,SubmissionQuestionSubmission")] SubmissionCreate sc )
        {

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

HTTP400: BAD REQUEST - The request could not be processed by the server due to invalid syntax.
POST - https://localhost:44363/info/Submissions/Create/

1 Ответ

0 голосов
/ 10 июля 2020

Это «неверный запрос», потому что вы не используете помощник тега формы . Это должно создать для вас URL-адрес действия и добавить токен защиты от подделки.

Однако ваши маршруты и действия контроллера должны иметь сопоставление 1-1. Прямо сейчас у вас есть 3 разных пути к одним и тем же действиям. Как эти действия должны знать, какой маршрут был использован и, следовательно, какие действия следует предпринять? Планируете ли вы проверять необработанный URL в каждом действии?

Вы пытаетесь разделить контроллеры на области ? В этом случае добавление атрибутов asp-controller, asp-action, asp-route-... приведет к тому, что вспомогательная функция тега формы создаст для вас правильный URL.

Или вы бы предпочли добавить дополнительный аргумент к каждому действию, указывая, какой URL был использован. Что вы затем можете добавить в свою модель, чтобы ваше представление могло предоставить его в качестве параметра маршрута.

...