繁体   English   中英

ASP.Net Core 3.1 中的非字符串配置?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM