【问题标题】:How do I add a new action to a class that inherits from an MVC controller如何向从 MVC 控制器继承的类添加新操作
【发布时间】:2021-01-15 19:57:06
【问题描述】:

我有一个 .Net Core (3.1) MVC 应用程序,我正在尝试向控制器添加一个新操作。但是,鉴于此解决方案的架构,我可以更改的内容非常有限。

基本上我有一个 MVC 控制器,以及一个从这个控制器继承的类,它覆盖了一些现有的操作。这工作正常,但我需要向这个继承的控制器添加一个新操作,我找不到如何为其设置路由。

我的主控制器是:

public class HomeController : Controller
{
    [HttpGet]
    public virtual IActionResult Index()
    {
        return Json(new
        {
            Success = true,
            Message = "Called HomeController.Index"
        });
    }
}

我的派生类是:

public class HomeControllerExtended : HomeController
{
    public override IActionResult Index()
    {
        return Json(new
        {
            Success = true,
            Message = "Called HomeControllerExtended.Index"
        });
    }

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

访问 /Home/Index 会返回带有“Called HomeControllerExtended.Index”消息的 JSON,这是预期的。但是,访问 /Home/DoThis 会导致 404。

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

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

    endpoints.MapControllerRoute(
        name: "DoThis",
        pattern: "{controller=Home}/{action=DoThis}");
});

但这没什么区别。

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

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

【问题讨论】:

  • DoThis操作处的路由属性附加为[Route(“Home/DoThis”)]
  • @user1672994 当然!谢谢,是的,这成功了。我知道这会是一件非常直接的事情。
  • 将其作为答案发布。

标签: c# inheritance asp.net-core-mvc


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多