我正在将一些旧的ASP.Net核心应用程序从2.1转换到3.1。
我知道如何使用options.EnableEndpointRouting = false
来使用遗留的IRouter逻辑;但是,一旦设置了该逻辑,是否有一个内置在ASP.Net中的标志可以读取,以告诉EnableEndpointRouting
的当前值?
目前,我从一个与使用UseMvc
设置EnableEndpointRouting
的位置完全不同的地方调用AddMvc
,并且我希望能够在到达那里后决定是使用UseMvc
还是UseEndpoints
。
如果您想知道为什么我希望这个文件可以切换,这是我维护的框架的一部分,所以应用程序不会简单地在启动中硬编码这些东西。
发布于 2020-02-24 20:51:57
您想在哪里进行值控制?通常,您可以注入MvcOptions
并从中获取值。
public class Foo
{
private readonly IOptions<MvcOptions> _ops;
public Foo(IOptions<MvcOptions> ops)
{
_ops = ops;
}
public bool IsEndPointRoutingEnabled => _ops.Value.EnableEndpointRouting;
}
更新
如果您想使用GetService
而不是注入构造函数:
public class Foo
{
private readonly IOptions<MvcOptions> _ops;
public Foo(IServiceProvider provider)
{
_ops = provider.GetService(typeof(IOptions<MvcOptions>)) as IOptions<MvcOptions>;
}
public bool IsEndPointRoutingEnabled => _ops.Value.EnableEndpointRouting;
}
注意,这被认为是反模式和不建议在使用DI时使用。
https://stackoverflow.com/questions/60381774
复制