gpt4 book ai didi

asp.net-mvc-routing - 在 .NET MVC 4.0 URL 结构中强制使用连字符

转载 作者:行者123 更新时间:2023-12-05 00:36:09 25 4
gpt4 key购买 nike

我正在寻找一种自动连接 CamelCase 操作和 View 的方法。也就是说,我希望我不必实际重命名我的 View 或为站点中的每个 ActionResult 添加装饰器。

到目前为止,我一直在使用 routes.MapRouteLowercase ,如图 here .这对于 URL 结构的小写方面非常有效,但不适用于连字符。所以我最近开始玩 Canonicalize (通过 NuGet 安装),但它也没有连字符的任何内容。

我试图...
routes.Canonicalize().NoWww().Pattern("([a-z0-9])([A-Z])", "$1-$2").Lowercase().NoTrailingSlash();
我的正则表达式绝对按照我希望的方式工作,只要正确地重组 URL,当然,这些 URL 没有被识别。文件仍然是 ChangePassword.cshtml ,例如,所以 /account/change-password不会指出这一点。

顺便说一句,我对 .NET MVC 还是有点生疏。我已经有几年没有使用它了,从 v2.0 开始就没有使用过。

最佳答案

这可能有点乱,但是如果您创建了自定义 HttpHandlerRouteHandler那么这应该可以防止您必须重命名所有 View 和操作。您的处理程序可以从请求的操作中去除连字符,这会将“更改密码”更改为更改密码,从而呈现 ChangePassword 操作。

为了简洁起见,代码被缩短了,但重要的部分在那里。

public void ProcessRequest(HttpContext context)
{
string controllerId = this.requestContext.RouteData.GetRequiredString("controller");
string view = this.requestContext.RouteData.GetRequiredString("action");

view = view.Replace("-", "");
this.requestContext.RouteData.Values["action"] = view;

IController controller = null;
IControllerFactory factory = null;

try
{
factory = ControllerBuilder.Current.GetControllerFactory();
controller = factory.CreateController(this.requestContext, controllerId);

if (controller != null)
{
controller.Execute(this.requestContext);
}
}
finally
{
factory.ReleaseController(controller);
}
}

我不知道我是否以最好的方式实现了它,这或多或少地取自第一个 sample我碰到。我自己测试了代码,所以这确实呈现了正确的 Action / View 并且应该可以解决问题。

关于asp.net-mvc-routing - 在 .NET MVC 4.0 URL 结构中强制使用连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8463330/

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