c# - 有什么方法可以覆盖操作方法的属性而不必覆盖整个方法?

标签 c# asp.net-mvc asp.net-mvc-5 attributerouting

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

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();
    }
}

这对我来说太糟糕了。至少我不会重复实际操作方法的代码(在某些情况下会重复很多),但这对我来说感觉不对。此外,在基本操作方法定义由于某种原因发生更改的情况下,这会成为维护方面的噩梦。一般而言,我是否缺少某种方式来更改属性而不必覆盖方法?也许,某些属性路由特定。还是我运气不好?

最佳答案

查看这篇 SO 帖子并回答

Multiple RoutePrefixes per controller using MVC Attribute routing?

然后你可以做这样的事情:

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

        return View();
    }
}

关于c# - 有什么方法可以覆盖操作方法的属性而不必覆盖整个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25208460/

相关文章:

c# - 像 c++ time_t 一样使用 c# System.DateTime

c# - Fluent NHibernate 一对多级联删除

c# - 默认情况下路由到 Index 之外的另一个操作

.net - IIS 7.0错误-500.19内部服务器错误

javascript - 如何使用外部登录从 Web API 2 获取 token

asp.net-mvc - 将 Glimpse 添加到引用 EF 项目的 MVC 项目的正确方法是什么?

c# - 在循环重复期间保持准确的条件

c# - 如何从日期时间中减去一年?

c# - 如何在 ASP.NET 中显示 "View"表(SQL 表)?

c# - 确保 WebApi 中的路由安全