ASP.NET Core在哪里发现自定义IRouteConstraint



我正在挖掘源代码,看看asp.net核心发现如何自定义IRouteConstraint

我们知道,当我们定义自定义IRouteConstraint时,我们会将其作为添加到RouteOptions

public void ConfigureServices(IServiceCollection services) 
{
services.Configure<RouteOptions>(opts => {
opts.ConstraintMap.Add("countryName", typeof(CountryRouteConstraint));
});  
}
public class CountryRouteConstraint: IRouteConstraint 
{
public bool Match(...) { ... }
}

其中CCD_ 4被注册。

所以我检查了的源代码

  • EndpointRoutingMiddleware(https://source.dot.net/#Microsoft.AspNetCore.Routing/EndpointRoutingMiddleware.cs,e91e5febd7b6da29(

  • DfaMatcher(https://source.dot.net/#Microsoft.AspNetCore.Routing/Matching/DfaMatcher.cs,0b08e610bec2cfbc(

等等,我没有找到任何试图从RouteOptions读取到发现自定义IRouteConstraint的源代码部分。

这是我认为最有可能的地方https://source.dot.net/#Microsoft.AspNetCore.Routing/Matching/DfaMatcher.cs,197但是仍然没有找到任何东西。

有人能给我看一下ASP.NET Core从RouteOptions读取到发现自定义IRouteConstraint的源代码部分吗?

导航到RouteOptionsConstraintMap属性,您将向该属性添加CountryRouteConstraint约束。

查找其参考资料。

你最感兴趣的是

  • DefaultInlineConstraintResolver

  • DefaultParameterPolicyFactory

两者都使用ParameterPolicyActivator来实例化约束,并传入该ConstraintMap

例如,DefaultParameterPolicyFactory显示在下方

var parameterPolicy = ParameterPolicyActivator.ResolveParameterPolicy<IParameterPolicy>(
_options.ConstraintMap,
_serviceProvider,
inlineText,
out var parameterPolicyKey);

最新更新