【发布时间】: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