首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用`System.Web.Mvc.RouteAttribute`以外的属性来确保框架找到并注册路由?

如何使用`System.Web.Mvc.RouteAttribute`以外的属性来确保框架找到并注册路由?
EN

Stack Overflow用户
提问于 2018-04-04 17:27:59
回答 1查看 72关注 0票数 0

我正在尝试将一个使用MVC 3.0.0.1的应用程序迁移到最新的框架包(5.x.x.x)。

该项目目前使用第三方属性路由框架来实现属性路由,并使用[GET("Route")]等约定,但这不是.Net的approach [Route("Route")]中定义路由的方式。

与其更新所有的控制器和动作来使用新的约定,我更喜欢使用‘桥接’属性,这样一旦项目完全转换,我们就可以重构。问题是,System.Web.Mvc.RouteAttribute是密封的,我不能扩展它。

代码语言:javascript
复制
// compiler: GETAttribute cannot derive from sealed class RouteAttribute
public class GETAttribute : System.Web.Mvc.RouteAttribute {}

有没有办法配置框架来查找我的自定义属性路由,或者我必须重构和/或找到一种手动注册这些路由的方法?

在此之前,非常感谢您。

EN

回答 1

Stack Overflow用户

发布于 2018-04-05 18:27:17

感谢@Stephen Muecke帮助我得到这个答案。

要确保框架获取您的属性,请在您的属性上使用IDirectRouteFactoryIHttpRouteInfoProvider接口:

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = false, AllowMultiple = true)]
public class GETAttribute : Attribute, IDirectRouteFactory, IHttpRouteInfoProvider
{
    public GETAttribute() { }

    public GETAttribute(string template)
    {
        Template = template;
    }

    public int ActionPrecedence { get; set; }

    public string Name { get; set; }

    public string Template { get; set; }

    public int Order { get; set; }

    public RouteEntry CreateRoute(DirectRouteFactoryContext context)
    {
        IDirectRouteBuilder builder = context.CreateBuilder(Template);
        builder.Name = Name;
        builder.Order = Order;
        builder.Precedence = ActionPrecedence;
        return builder.Build();
    }
}

我实际上还没有弄清楚如何指定httpMethod,但这至少可以注册路由,而不需要额外的工作。

您可以在GitHub上的aspnetwebstack repo上查看它的内部结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49647399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档