如何在asp.net core 3中添加全局路由前缀?

亚历克斯·扎伊采夫(Alex Zaitsev)

旧版.net核心框架用于UseMvc()添加全局路由前缀。asp.net core 3没有它怎么做UseMvc()

瑞安

您可以参考以下asp.net core 3.0中的演示以使用api版本设置全局路由前缀。可以通过更改设置任意前缀 services.AddControllersWithViews(o => { o.UseGeneralRoutePrefix("api/v{version:apiVersion}"); });

1.创建一个自定义 MvcOptionsExtensions

public static class MvcOptionsExtensions
{
    public static void UseGeneralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
    {
        opts.Conventions.Add(new RoutePrefixConvention(routeAttribute));
    }

    public static void UseGeneralRoutePrefix(this MvcOptions opts, string 
    prefix)
    {
        opts.UseGeneralRoutePrefix(new RouteAttribute(prefix));
    }
}

public class RoutePrefixConvention : IApplicationModelConvention
{
    private readonly AttributeRouteModel _routePrefix;

    public RoutePrefixConvention(IRouteTemplateProvider route)
    {
        _routePrefix = new AttributeRouteModel(route);
    }

    public void Apply(ApplicationModel application)
    {
        foreach (var selector in application.Controllers.SelectMany(c => c.Selectors))
        {
            if (selector.AttributeRouteModel != null)
            {
                selector.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_routePrefix, selector.AttributeRouteModel);
            }
            else
            {
                selector.AttributeRouteModel = _routePrefix;
            }
        }
    }
}

2.在Startup.cs中注册(您需要安装软件包Microsoft.AspNetCore.Mvc.Versioning,3.0的当前版本是4.0.0-preview8.19405.7)

public void ConfigureServices(IServiceCollection services) {
    //MVC service registration
    //https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#mvc-service-registration
    services.AddControllersWithViews(o = >{
        o.UseGeneralRoutePrefix("api/v{version:apiVersion}");
    });

    services.AddApiVersioning(o = >o.ReportApiVersions = true);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints = >{
        endpoints.MapControllerRoute(
        name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
    });
}

3,控制器

[ApiVersion("1")]
[ApiVersion("2")]
[Route("test")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpGet("version"), MapToApiVersion("1")]
    public IActionResult GetV1()
    {
        return new OkObjectResult("Version One");
    }
}

4.结果

调用/api/v1/test/version结果为“第一版”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET Core中为gRPC服务添加全局异常处理程序?

来自分类Dev

如何在ASP.NET Core中进行条件路由?

来自分类Dev

如何向 ASP.Net Core API 路由添加变量前缀?

来自分类Dev

如何在Asp.net Core中缓存资源?

来自分类Dev

如何在ASP.NET Core中设置cookie validateInterval?

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

来自分类Dev

如何在ASP.NET Core中获取IIS版本

来自分类Dev

如何在ASP.NET Core 3.0中调用UseWebRoot

来自分类Dev

如何在ASP .NET Core 3.1中设置请求超时

来自分类Dev

如何在ASP.NET Core中设置默认区域?

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

来自分类Dev

如何在 asp.net core 中创建类扩展?

来自分类Dev

maxReceivedMessageSize 如何在 Asp.net Core Api 中设置?

来自分类Dev

如何在asp.net core中配置依赖

来自分类Dev

.NET Core反射-如何在ASP.NET Core 3剃刀视图中查找属性的引用?

来自分类Dev

如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

来自分类Dev

如何在ASP.NET CORE MVC中覆盖默认的Identity AccessDenied路由

来自分类Dev

如何在asp.net core中实现经典的webapi 2路由

来自分类Dev

如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

来自分类Dev

如何在ASP.NET Core MVC中基于用户表中的字段添加声明?

来自分类Dev

如何在ASP.NET Core 3.0中的存储过程中添加参数

来自分类Dev

默认情况下如何在ASP.NET Core中添加URL参数

来自分类Dev

如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger

来自分类Dev

如何在ASP.NET Core中添加多个身份和多个角色

来自分类Dev

如何在ASP.NET Core 5中添加身份服务

来自分类Dev

如何在ASP.NET Core中向“ IConfiguration”添加新的键/值

来自分类Dev

如何在IIS网址重写(ASP NET Core)中添加异常?

来自分类Dev

如何在ASP.NET Core API中添加和删除收藏夹

来自分类Dev

如何在asp.net core MVC应用程序中添加页面列表?

Related 相关文章

  1. 1

    如何在ASP.NET Core中为gRPC服务添加全局异常处理程序?

  2. 2

    如何在ASP.NET Core中进行条件路由?

  3. 3

    如何向 ASP.Net Core API 路由添加变量前缀?

  4. 4

    如何在Asp.net Core中缓存资源?

  5. 5

    如何在ASP.NET Core中设置cookie validateInterval?

  6. 6

    如何在ASP .NET Core中创建Azure AD用户?

  7. 7

    如何在ASP.NET Core中获取IIS版本

  8. 8

    如何在ASP.NET Core 3.0中调用UseWebRoot

  9. 9

    如何在ASP .NET Core 3.1中设置请求超时

  10. 10

    如何在ASP.NET Core中设置默认区域?

  11. 11

    如何在ASP .NET Core中创建Azure AD用户?

  12. 12

    如何在 asp.net core 中创建类扩展?

  13. 13

    maxReceivedMessageSize 如何在 Asp.net Core Api 中设置?

  14. 14

    如何在asp.net core中配置依赖

  15. 15

    .NET Core反射-如何在ASP.NET Core 3剃刀视图中查找属性的引用?

  16. 16

    如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

  17. 17

    如何在ASP.NET CORE MVC中覆盖默认的Identity AccessDenied路由

  18. 18

    如何在asp.net core中实现经典的webapi 2路由

  19. 19

    如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

  20. 20

    如何在ASP.NET Core MVC中基于用户表中的字段添加声明?

  21. 21

    如何在ASP.NET Core 3.0中的存储过程中添加参数

  22. 22

    默认情况下如何在ASP.NET Core中添加URL参数

  23. 23

    如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger

  24. 24

    如何在ASP.NET Core中添加多个身份和多个角色

  25. 25

    如何在ASP.NET Core 5中添加身份服务

  26. 26

    如何在ASP.NET Core中向“ IConfiguration”添加新的键/值

  27. 27

    如何在IIS网址重写(ASP NET Core)中添加异常?

  28. 28

    如何在ASP.NET Core API中添加和删除收藏夹

  29. 29

    如何在asp.net core MVC应用程序中添加页面列表?

热门标签

归档