这可能是由于控制器的名称没有正确匹配和注册引起的。要解决这个问题,需要检查控制器的名称是否正确注册并匹配URL模式。以下是示例代码:
在Startup类的Configure方法中,添加以下代码来注册控制器:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
// Add the dynamic controller route
endpoints.MapDynamicControllerRoute(
"{controller}/{action}/{id?}");
});
在这个示例中,我们使用了MapDynamicControllerRoute方法来注册动态控制器路由,并提供了一个自定义的控制器路由类CustomControllerRoute。要确保控制器的名称与路由模式匹配,以下是自定义控制器路由类的示例代码:
public class CustomControllerRoute : ControllerRoute
{
public override bool TryParse(
string controllerName,
out RouteValueDictionary routeValues)
{
if (controllerName == "CustomControllerName")
{
routeValues = new RouteValueDictionary();
routeValues["controller"] = controllerName;
return true;
}
return base.TryParse(controllerName, out routeValues);
}
}
在这个示例中,我们改写了TryParse方法以正确匹配自定义控制器名称。如果控制器名称与自定义名称匹配,则创建一个新的RouteValueDictionary,将控制器名称添加到路由值中,并返回true。否则,我们调用基类的TryParse方法并返回基类的结果。