首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为使用中央路由前缀的web api设置版本的routeattribute的目的是什么

为使用中央路由前缀的web api设置版本的routeattribute的目的是什么
EN

Stack Overflow用户
提问于 2019-04-15 14:45:58
回答 1查看 398关注 0票数 1

我正在使用mvc设置一个新的web,其中一个配置mvc的选项是"UseCentralRoutePrefix“。它接受一个新的routeattribute作为参数。

在许多地方,我看到为路由属性设置了一个版本,如行内所示:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(opt =>
    {
        opt.UseCentralRoutePrefix(new RouteAttribute("api/v{version}"));
    });
}

有人能给我解释一下上面这段代码中{version}的意义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 20:46:02

首先,UseCentralRoutePrefix不是开箱即用的。我认为它是由相当多的人提供的一种扩展方法,带有自定义的RouteConvention,以方便集中添加RoutePrefix。这个想法是,你不必用你可能需要使用的前缀来标记所有的控制器方法。在您的示例中为api/v{version}

关于{version}的意义,它是一个路由参数,它可以是大括号内的任何东西。这意味着您的所有端点都需要一个路由参数。调用该操作时,此参数将绑定到version参数。因此,如果您的控制器名称是ValuesController,并且您还没有为控制器定义RouteName,那么您的端点将是api/v1/values

代码语言:javascript
复制
public class ValuesController : Controller
{
    public IActionResult GetValue(int version)
    {
        return new ContentResult { Content = version.ToString() };
    }
}

如果您使用api/v1/values调用上述操作,则输出将为1。我希望这会有所帮助。

此外,如果要通过在操作方法上使用[ApiVersion]属性或在ConfigureServices方法中使用以下代码来启用版本控制,则通常使用version参数

代码语言:javascript
复制
services.AddApiVersioning(options =>
        {
            var apiVersion = new ApiVersion(1, 0);

            options.ApiVersionReader = new UrlSegmentApiVersionReader();
            options.DefaultApiVersion = apiVersion;
            options.ReportApiVersions = true;
            options.AssumeDefaultVersionWhenUnspecified = true;
        });

有关版本控制的更多详细信息,请阅读here

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

https://stackoverflow.com/questions/55683786

复制
相关文章

相似问题

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