Я перешел на 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();
}
}
из /Article/Create url Я хочу отправить форму, в которой находится метод /Article/Insert





Вы используете маршрутизацию на основе атрибутов, но не применили никаких маршрутов ни к одному из этих действий. Таким образом, все они используют по умолчанию "" или пустой маршрут. Вам нужно сделать что-то вроде:
[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; неподдерживаемый тип носителя».
Это другая проблема полностью. Теперь вы исправили проблему в своем вопросе, но у вас есть еще одна проблема, которую также необходимо исправить. Вы действительно должны открыть новый вопрос для этого. Однако я скажу, что это результат кодирования тела запроса. Например, если вы публикуете XML без включения сериализаторов XML, это ваша проблема.
Я удалил [FromBody] из метода Insert, и теперь все в порядке!
По какому маршруту вы публикуете?