有什么方法可以覆盖action方法的属性而不必覆盖整个方法?

Chr*_*att 5 c# asp.net-mvc attributerouting asp.net-mvc-5

我在MVC 5中使用属性路由,但我开始注意到一点痛点.我有一种情况,我想继承控制器,因为所有的动作都会做同样的事情.但是,我显然需要为子类的操作使用不同的路由.现在,我正在做类似于:

public class FooController : Controller
{
    [Route("foo", Name = "Foo")]
    public virtual ActionResult Foo()
    {
        ...

        return View();
    }
}

public class BarController : FooController
{
    [Route("bar", Name = "Bar")]
    public override ActionResult Foo()
    {
        return base.Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很糟糕.我不是重复实际操作方法的代码(在某些情况下是相当多的),至少,但这对我来说感觉不对.此外,在基本操作方法定义由于某种原因而发生变化的情况下,这会成为一种维护噩梦.通常,我是否有某些方法可以在不必覆盖方法的情况下更改属性?也许,某些属性特定于路由.或者我只是运气不好?

jef*_*non 0

查看此帖子并回答

使用 MVC 属性路由的每个控制器有多个 RoutePrefix?

那么你可以做这样的事情:

[RoutePrefix("{Type:regex(Foo|Bar)}")]
public class FooController : Controller
{
    [Route("foo", Name = "Foo")]
    public virtual ActionResult Foo()
    {
        ...

        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)