You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查找属性路由及URL对应的控制器与Action?

快速定位属性路由对应的控制器与Action的方法

我来分享几个实用的方法帮你快速搞定这个问题,不用再挨个瞎搜路由名称啦:

方法一:用ASP.NET Core内置的路由诊断中间件

这是最直接的方式,只需要几行代码就能生成所有路由的映射清单:
在你的Program.cs里,找到app.UseRouting();之后的位置,添加这段代码:

app.UseEndpoints(endpoints =>
{
    // 新增一个用于查看路由的端点
    endpoints.MapGet("/routes", async context =>
    {
        var endpointDataSource = endpoints.DataSources.FirstOrDefault();
        if (endpointDataSource != null)
        {
            var routes = endpointDataSource.Endpoints.OfType<RouteEndpoint>();
            var routeDetails = routes.Select(r => new
            {
                RoutePattern = r.RoutePattern.RawText,
                Controller = r.Metadata.OfType<ControllerActionDescriptor>().FirstOrDefault()?.ControllerName,
                Action = r.Metadata.OfType<ControllerActionDescriptor>().FirstOrDefault()?.ActionName,
                HttpMethod = r.Metadata.OfType<HttpMethodMetadata>().FirstOrDefault()?.HttpMethods.FirstOrDefault()
            });
            await context.Response.WriteAsJsonAsync(routeDetails);
        }
    });

    // 保留你原有的端点配置
    endpoints.MapControllers();
});

启动项目后访问/routes,就能看到所有路由的详细信息,包括路由模板、对应的控制器、Action名称,甚至请求方法。比如你提到的url/examples/1,就能找到RoutePatternexamples/{id}的条目,对应的Controller和Action就是你要找的目标。

方法二:调试时直接查看请求匹配的端点

在你怀疑的控制器Action里打个断点,或者在全局过滤器里,通过HttpContext获取当前匹配的端点:

var endpoint = HttpContext.GetEndpoint();
if (endpoint != null)
{
    var actionDescriptor = endpoint.Metadata.OfType<ControllerActionDescriptor>().FirstOrDefault();
    if (actionDescriptor != null)
    {
        // 这里就能拿到控制器和Action名称
        string controllerName = actionDescriptor.ControllerName;
        string actionName = actionDescriptor.ActionName;
    }
}

当请求url/examples/1进来时,断点触发后就能直接看到对应的控制器和Action信息。

方法三:Visual Studio快捷搜索技巧

如果你已经知道路由模板(比如examples/{id}),可以直接用VS的解决方案范围搜索

  • Ctrl+Shift+F打开搜索窗口,输入[Route("examples/{id}")](注意引号要带上),就能直接定位到标注了这个路由的Action方法。
  • 如果记不全完整模板,也可以搜Route("examples这样的片段,缩小搜索范围。

方法四:第三方工具包(适用于老版本)

如果是ASP.NET Core 3.0之前的版本,内置功能不够完善,可以考虑安装专门的路由调试包(比如Route Debugger),这类工具会在页面上直观展示所有路由映射关系,以及请求对应的匹配结果。不过新版本用内置中间件就完全够用了。

内容的提问来源于stack exchange,提问作者MOG

火山引擎 最新活动