【发布时间】:2022-06-14 23:37:31
【问题描述】:
在旧的 .Net Framework MVC 实现中,我自己创建路由,这样我也可以影响 url 的生成。部分代码:
public class RouteBase : Route
{
public RouteBase(string url, IRouteHandler routeHandler) : base(url, routeHandler) { }
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
if (Url.Contains("{segment}") && !values.ContainsKey("segment"))
values["segment"] = requestContext.HttpContext.Items["segmentValue"];
return base.GetVirtualPath(requestContext, values);
}
}
感谢 GetVirtualPath,我能够检测到路由模板中的特定段并在路由值字典中注入适当的值,以便客户端应用程序在调用例如 Url.RouteUrl(routeName) 时不必指定它.
在 asp.net core 6 中,我现在使用基于属性的路由,但我不知道如何挂钩,以便在生成 url 时向路由值字典中注入一些值。如果我有这样的路线模板:
[Route("{segment}/test", Name = "name"]
我想在调用时注入段:
var url = Url.RouteUrl("name"); // Not passing new { segment = value } as second param
有关信息,我只是在 Startup 中使用它:
app.MapControllers();
【问题讨论】:
-
Asp.Net Core有一个类似的接口叫
IRoute,你试过用吗?在我看来,如果你想在进入动作之前对 URL 做一些判断,你可以自定义一个中间件来做到这一点, -
@XinranShen 好吧,毕竟我不认为中间件能够相对于 url 生成有所帮助。有传入请求时使用中间件。例如,在这里我想挂接到 Url.RouteUrl 以便我可以将值添加到路由值字典中。
标签: c# asp.net-core routes asp.net-core-6.0