![](/img/trans.png)
[英]Asp.Net Core 3.1 Multiple dependent custom configuration providers
[英]Non-String Configuration in ASP.Net Core 3.1?
目前,我使用字符串来定义和使用路由、角色、策略等。很容易拼写错误或将字符串值弄错,因为它们不是 IDE 自动完成和类型检查的一部分。
有没有办法在 ASP.NET Core 3.1 中使用某种引用或符号? 也许通过配置提供程序和 DI?
我希望看到的是在某处定义这些字符串配置值,然后在应用程序的各个部分引用它们?
为什么不使用常量类?
public static class RoutingConstants
{
public const string Route1 = "route1";
...
}
对于任何其他需要,同样的事情
然后您可以像这样RoutingConstants.Route1
那样到处访问常量
授权角色:
您可以将角色重构为常量并像这样使用它们:
public class StaticRoles
{
public const string A = "A";
public const string B = "B";
public const string C = "C";
public const string ABC = "A, B, C";
}
像这样使用这些常量:
[Authorize(Roles = StaticRoles.ABC)]
[Route("foo")]
public IActionResult Foo()
在视图中使用路由:
生成链接时,您可以使用标签助手来自动从控制器方法读取 Route 属性的链接:
<a asp-controller="@nameof(HomeController).Replace("Controller", string.Empty)" asp-action="@nameof(HomeController.Foo)">Foo</a>
您应该将.Replace("Controller", string.Empty)
重构为 String 扩展方法以减少代码膨胀。
在代码中使用路由:
如果你想在代码中拥有与标签助手相同的功能,你可以使用自动注入的LinkGenerator 类
使用依赖注入获取对LinkGenerator
的引用
public class HomeController : Controller
{
private readonly LinkGenerator linkGenerator;
public HomeController(LinkGenerator linkGenerator)
{
this.linkGenerator = linkGenerator;
}
// ..
}
在HomeController
,您可以使用
linkGenerator.GetPathByAction(
nameof(HomeController.Index),
nameof(HomeController).Replace("Controller", string.Empty))
};
当路由将参数作为 URL 的一部分时, GetPathByAction
具有第三个参数:
linkGenerator.GetPathByAction(
nameof(HomeController.Index),
nameof(HomeController).Replace("Controller", string.Empty),
values: new { version = user.Version})
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.