C# 如何向从MVC控制器继承的类添加新操作

C# 如何向从MVC控制器继承的类添加新操作,c#,inheritance,asp.net-core-mvc,C#,Inheritance,Asp.net Core Mvc,我有一个.NETCore(3.1)MVC应用程序,我正在尝试向控制器添加一个新操作。然而,考虑到这个解决方案的体系结构,我对我能改变的东西非常有限 实际上,我有一个MVC控制器和一个继承自该控制器的类,该类重写了一些现有操作。这很好,但是我需要向这个继承的控制器添加一个新操作,我找不到如何为它设置路由 我的主控制器是: 公共类HomeController:控制器 { [HttpGet] 公共虚拟IActionResult索引() { 返回Json(新的 { 成功=正确, Message=“调用H

我有一个.NETCore(3.1)MVC应用程序,我正在尝试向控制器添加一个新操作。然而,考虑到这个解决方案的体系结构,我对我能改变的东西非常有限

实际上,我有一个MVC控制器和一个继承自该控制器的类,该类重写了一些现有操作。这很好,但是我需要向这个继承的控制器添加一个新操作,我找不到如何为它设置路由

我的主控制器是:

公共类HomeController:控制器
{
[HttpGet]
公共虚拟IActionResult索引()
{
返回Json(新的
{
成功=正确,
Message=“调用HomeController.Index”
});
}
}
我的派生类是:

公共类HomeController扩展:HomeController
{
公共覆盖IActionResult索引()
{
返回Json(新的
{
成功=正确,
Message=“调用HomeControllerExtended.Index”
});
}
[HttpGet]
公共IActionResult DoThis()
{
返回Json(新的
{
成功=正确,
Message=“称为DoThis”
});
}
}
访问/Home/Index返回带有“Called HomeControllerExtended.Index”消息的JSON,这是预期的。但是,访问/Home/dot会导致404

我尝试了几种在Startup.cs中添加新路由的方法,但没有任何效果。例如:

app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
endpoints.MapControllerRoute(
名字:“多蒂斯”,
模式:“{controller=Home}/{action=DoThis}”);
});
但这没什么区别

首先,是否可以像这样添加新的操作?如果是这样,我如何配置路由以查找新操作


请注意,我根本无法更改HomeController,新操作需要能够访问HomeController上受保护的方法。

您可以在
上附加路由属性。此操作如下所示

[Route("Home/DoThis")]
[HttpGet]
public IActionResult DoThis()
{
    return Json(new
    {
        Success = true,
        Message = "Called DoThis"
    });
}

现在,您可以使用
/Home/DoThis
路径访问
DoThis
操作。

您可以在
DoThis
操作上附加路由属性,如下所示

[Route("Home/DoThis")]
[HttpGet]
public IActionResult DoThis()
{
    return Json(new
    {
        Success = true,
        Message = "Called DoThis"
    });
}

现在,您可以使用
/Home/DoThis
路径访问
DoThis
操作。

DoThis
操作中附加route属性,当然是
[route(“Home/DoThis”)]
@user1672994!谢谢你,是的,成功了。我知道这是一个非常直截了当的问题。将其作为答案发布。将路由属性附加到
DoThis
操作作为
[route(“Home/DoThis”)]
@user1672994当然!谢谢你,是的,成功了。我知道这会是一件非常直截了当的事情。把它作为答案贴出来。