gpt4 book ai didi

c# - 将 URL 转换为 Controller / Action 对

转载 作者:行者123 更新时间:2023-11-30 15:58:24 25 4
gpt4 key购买 nike

在 .Net MVC 中,您将路由定义到 RouteCollection 中。 URL 帮助器方法可以轻松地将 controller + action + optional params 转换为 URL。

当 .Net MVC 处理来自客户端浏览器的请求时,它明确地将此 URL 映射到正确的 controller + action,以执行适当的命令。

但是,我看不到以编程方式动态访问此路由的方法,这样我就可以将完全限定的 URL(或 10k+ URL 的列表)转换为它的路由组件。

有谁知道你会如何转换,例如,下面的字符串input:

"http://stackoverflow.com/questions/2342325/c-sharp-net-mvc-turning-url-into-controller-action-pair"

进入以下输出:

{
controller: "questions",
action: "view",
id: 2342325,
seoText: "c-sharp-net-mvc-turning-url-into-controller-action-pair"
}

鉴于此映射显然是由 .Net 完成的,它是否暴露在任何地方?

为什么会有人想要这样做?

假设您有一个您知道已被访问的 URL 列表,大多数本质上是动态的,例如 stackoverflow.com/questions/2342325/c-sharp-net-mvc-turning-url-into-controller- action-pair,并且您想计算出哪些实际的端点/ Action / Controller 正在以编程方式被击中(而不用太在意传递的实际数据)。

可以手动编码映射,这样您就知道/questions/{id}/{text} -> controller: questions, action: question,但这不是面向 future 的,也不是有趣的,并且依赖于文本操作/处理。

给定一个路由字典和一个 URL 列表,以及一个如上所述的函数,您可以查看哪些 Controller 被命中最多,或者哪些操作等。

最佳答案

您应该看看如何创建自己的 MvcRouteHandler .这是 MVC 堆栈中的一点,路由引擎已经解析了 URL 以找到要调用的 Controller 和操作,然后通过此方法获取要调用的实际 C# 类和方法。尚未应用授权甚至 HTTP Verb,因此您将看到对您的应用程序进行的每个调用。

public class CustomRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext context)
{
var controller = context.RouteData.Values["controller"];
var action = context.RouteData.Values["action"];

// Do whatever logging you want with this data, maybe grab the other params too.

return base.GetHttpHandler(context);
}
}

这可以很容易地在您设置路由的地方注册。

routes.MapRoute("Home", "{controller}/{action}", new
{
controller = "Home",
action = "Index"
})
.RouteHandler = new CustomRouteHandler();

关于c# - 将 URL 转换为 Controller / Action 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com