Совпало несколько действий

Я перешел на ASP.NET Core 2.1. Я хотел бы отправить форму (вставить метод из ArticleController: url: http://локальный:52125/статья/вставка), но получил эту ошибку:

An unhandled exception occurred while processing the request. AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

Jahan.Beta.Web.App.Controllers.ArticleController.Insert (Jahan.Beta.Web.App) Jahan.Beta.Web.App.Controllers.ArticleController.Edit (Jahan.Beta.Web.App) Jahan.Beta.Web.App.Controllers.ArticleController.DeleteConfirmed (Jahan.Beta.Web.App) Microsoft.AspNetCore.Mvc.Internal.ActionSelector.SelectBestCandidate(RouteContext context, IReadOnlyList candidates)

Как я могу это решить? и есть ли способ улучшить/оптимизировать route.MapRoute?

Контроллер статей:

[Route("[controller]")]
public class ArticleController : Controller
{
   [HttpPost]
   public async Task<IActionResult> Insert([FromBody]Article article)
   {
      // I want to run this method!
   }

   [HttpGet("Edit/{id}")]
   public async Task<IActionResult> Edit(int? id)
   {
   }
   [HttpPost]
   [ValidateAntiForgeryToken]
   public async Task<IActionResult> Edit(int id, [FromBody] Article article)
   {
   }

   [HttpPost, ActionName("DeleteConfirmed/{id}")]
   public async Task<IActionResult> DeleteConfirmed(int id)
   {
   }
}

часть файла startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseDeveloperExceptionPage();
        app.UseStatusCodePages();
        app.UseStaticFiles();
        app.UseAuthentication();

        var provider = new FileExtensionContentTypeProvider();
        provider.Mappings[".less"] = "plain/text";

        app.UseStaticFiles(new StaticFileOptions
        {
            ContentTypeProvider = provider
        });

        ApplicationDbContext.CreateAdminAccount(app.ApplicationServices, Configuration).Wait();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "areas",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
            );

            routes.MapRoute(
                name: "AdminAreasUsers",
                template: "{area:exists}/{controller=Users}/{action=Index}/{id?}"
            );
            routes.MapRoute(
                name: "AdminAreasDeleteUser",
                template: "{area:exists}/{controller=Users}/{action=Delete}/{id}"
            );
            routes.MapRoute(
               name: "FilterByTagAsync",
               template: "{controller}/{action}/{tagId}/{articlePage}",
               defaults: new { controller = "Article", action = "FilterByTagAsync", tagId = "", articlePage = "" }
           );
            routes.MapRoute(
               name: "ShowArticle",
               template: "{controller}/{action}/{Id}",
               defaults: new { controller = "Article", action = "Show", Id = "" }
           );

            routes.MapRoute(
               name: "default",
               template: "{controller}/{action}",
               defaults: new { controller = "Home", action = "Index" }
           );
            routes.MapRoute(
                name: "About",
                template: "{Controller=AboutUs}/{action=AboutUs}/{id?}");

        });

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
    }

По какому маршруту вы публикуете?

Jamie Taylor 02.07.2019 16:56

из /Article/Create url Я хочу отправить форму, в которой находится метод /Article/Insert

Roohi 02.07.2019 17:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 176
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете маршрутизацию на основе атрибутов, но не применили никаких маршрутов ни к одному из этих действий. Таким образом, все они используют по умолчанию "" или пустой маршрут. Вам нужно сделать что-то вроде:

[HttpPost("insert")]
public async Task<IActionResult> Insert([FromBody]Article article)

[HttpGet("Edit/{id}")]
public async Task<IActionResult> Edit(int? id)

[HttpPost("edit/{id}")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [FromBody] Article article)

[HttpPost("delete"), ActionName("DeleteConfirmed/{id}")]
public async Task<IActionResult> DeleteConfirmed(int id)

Я применил их, но получил эту ошибку «Код состояния: 415; неподдерживаемый тип носителя».

Roohi 02.07.2019 17:39

Это другая проблема полностью. Теперь вы исправили проблему в своем вопросе, но у вас есть еще одна проблема, которую также необходимо исправить. Вы действительно должны открыть новый вопрос для этого. Однако я скажу, что это результат кодирования тела запроса. Например, если вы публикуете XML без включения сериализаторов XML, это ваша проблема.

Chris Pratt 02.07.2019 17:54

Я удалил [FromBody] из метода Insert, и теперь все в порядке!

Roohi 02.07.2019 17:58

Другие вопросы по теме