gpt4 book ai didi

.net - 如何在页面路由后附加斜杠?

转载 作者:行者123 更新时间:2023-12-04 06:41:41 25 4
gpt4 key购买 nike

这是我遇到的与此查询几乎相同的问题,尽管我的是 Web 窗体场景(在 .NET 4 中使用路由)而不是 MVC。

Add a trailing slash at the end of each url?

不幸的是,有人提到的解决方案只提供了一半,因为指向完整解决方案的链接已断开。

目前,当我获取路由 url 时,我的页面路由中的任何尾部斜杠都会被删除。
当我想在我的 Web 表单上使用以下类型的内联语法时,这尤其成问题:

<a runat="server" href='<%$RouteUrl:RouteName=Posts %>'>

此处再次删除了尾部斜杠,尽管它存在于我的路由表中。

任何人都可以帮助提供一个干净,有效的解决方案来解决这个问题吗?理想情况下,就像我上面放置的另一个 Stack Overflow 线程中提供的“几乎完整”的解决方案一样?

最佳答案

我现在找到了我原来问题的解决方案。我发现下面的文章描述了如何确保所有 Url 都是小写的,所以我只使用了这个示例代码,但在它执行 ToLowerInvariant() 的地方附加了一个斜杠。

所以,我的 2 个辅助类现在看起来像这样:

public class LowercaseRoute : System.Web.Routing.Route
{
public LowercaseRoute(string url, IRouteHandler routeHandler)
: base(url, routeHandler) { }
public LowercaseRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler)
: base(url, defaults, routeHandler) { }
public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler)
: base(url, defaults, constraints, routeHandler) { }
public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler)
: base(url, defaults, constraints, dataTokens, routeHandler) { }

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
VirtualPathData path = base.GetVirtualPath(requestContext, values);

if (path != null)
path.VirtualPath = path.VirtualPath.ToLowerInvariant() + "/";

return path;
}
}

public static class RouteCollectionExtensions
{
public static void MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults)
{
routes.MapRouteLowercase(name, url, defaults, null);
}

public static void MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints)
{
if (routes == null)
throw new ArgumentNullException("routes");

if (url == null)
throw new ArgumentNullException("url");

var route = new LowercaseRoute(url, new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(defaults),
Constraints = new RouteValueDictionary(constraints)
};

if (String.IsNullOrEmpty(name))
routes.Add(route);
else
routes.Add(name, route);
}
}

在我的 global.asax 中,我没有在我的 RegisterRoutes 例程中使用“MapRoute”,而是调用我的新 MapRouteLowercase 方法(传入相同的参数),例如
routes.MapRouteLowercase("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

可以在此处找到我从中获得此代码的原始文章:

http://goneale.com/2008/12/19/lowercase-route-urls-in-aspnet-mvc/

关于.net - 如何在页面路由后附加斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157273/

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