首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Asp.net核心web api -扩展属性路由生成

Asp.net核心web api -扩展属性路由生成
EN

Stack Overflow用户
提问于 2019-06-16 14:13:54
回答 1查看 347关注 0票数 3

假设我希望允许人们为我的ASP.NET核心Web应用程序创建插件。

插件可以包括使用属性路由的端点:

代码语言:javascript
运行
复制
    [Route("[controller]")]
    public class SomePlugin: ControllerBase
    {

我可以加载这些插件,并将AssemblyPart添加到Asp.net核心的部件管理器中,这样就可以了--到目前为止没有问题。

但是,假设两个插件都意外地使用了相同的路径。他们可能会意外地发生冲突--一个插件覆盖了另一个插件的路径。我不想要这个。

所以我需要做的是确保每个插件/程序集都被分配给它自己的专用URL空间,它的路由是相对的。基本上,它是自己的专用Url基路径/前缀。

因此,在上述插件的情况下,即使开发人员使用了[Route("[controller]")]的路由属性,我也不希望它成为最终的路由。我想使它相对于那个插件特有的前缀-所以我想要生成的实际路由是[路由(“{plugin-前缀}/controller”)]。

这一策略有望保证插件不会意外地与其他路径发生冲突。

因此,希望现在我已经解释了这个问题,我的问题是,现在在asp.net核心中是否有适当的方法/机制来实现这一点?我使用的是新的端点路由机制的ASP.NET核心3.0。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-16 19:26:11

我自己还没有试过,但是你应该可以通过自定义路由约定实现这一点。就像这样:

代码语言:javascript
运行
复制
public class PrefixConvention : IApplicationModelConvention
{
    public void Apply(ApplicationModel application)
    {
        foreach (var controller in application.Controllers)
        {
            controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel()
            {
                Template = // "ADD_PREFIX_BASED_ON_CONTROLLER_TYPE"?
            };
        }
    }
}

然后将其添加到MVC约定中。

代码语言:javascript
运行
复制
services.AddMvc(options =>
{
    options.Conventions.Add(new PrefixConvention ());
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56619628

复制
相关文章

相似问题

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