我正在使用mvc设置一个新的web,其中一个配置mvc的选项是"UseCentralRoutePrefix“。它接受一个新的routeattribute作为参数。
在许多地方,我看到为路由属性设置了一个版本,如行内所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(opt =>
{
opt.UseCentralRoutePrefix(new RouteAttribute("api/v{version}"));
});
}有人能给我解释一下上面这段代码中{version}的意义吗?
发布于 2019-04-15 20:46:02
首先,UseCentralRoutePrefix不是开箱即用的。我认为它是由相当多的人提供的一种扩展方法,带有自定义的RouteConvention,以方便集中添加RoutePrefix。这个想法是,你不必用你可能需要使用的前缀来标记所有的控制器方法。在您的示例中为api/v{version}
关于{version}的意义,它是一个路由参数,它可以是大括号内的任何东西。这意味着您的所有端点都需要一个路由参数。调用该操作时,此参数将绑定到version参数。因此,如果您的控制器名称是ValuesController,并且您还没有为控制器定义RouteName,那么您的端点将是api/v1/values
public class ValuesController : Controller
{
public IActionResult GetValue(int version)
{
return new ContentResult { Content = version.ToString() };
}
}如果您使用api/v1/values调用上述操作,则输出将为1。我希望这会有所帮助。
此外,如果要通过在操作方法上使用[ApiVersion]属性或在ConfigureServices方法中使用以下代码来启用版本控制,则通常使用version参数
services.AddApiVersioning(options =>
{
var apiVersion = new ApiVersion(1, 0);
options.ApiVersionReader = new UrlSegmentApiVersionReader();
options.DefaultApiVersion = apiVersion;
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
});有关版本控制的更多详细信息,请阅读here
https://stackoverflow.com/questions/55683786
复制相似问题