gpt4 book ai didi

c# - MVC3路由表错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:32 24 4
gpt4 key购买 nike

我有这个 RegisterRoute 函数

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.Add("JsActionRoute", JsAction.JsActionRouteHandlerInstance.JsActionRoute);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}

JsActionRoute 就是这样的路由。

public static readonly Route JsActionRoute = new Route("JsAction",
new JsAction.JsActionHandler());

我希望所有指向 JsAction/的链接都应该由我的习惯路由处理。

现在当简单地调用@Html.ActionLink 时,Mvc3 创建了一个与 JsAction 相关的链接,我不明白为什么。

@Html.ActionLink("About","About") -> JsAction?Action=About&Controller=Index

最佳答案

路由的评估顺序与它们注册的顺序相同。您可以使用 RouteLink 明确指定路由名称:

@Html.RouteLink("About", "Default", new { action = "About" })

如果您颠倒定义的顺序,那么链接将正确生成,但在请求 JsAction/ url 时您的自定义路由将不会被命中,因为没有什么可以从默认路由中消除此 url 的歧义。

您将不得不重新考虑您的路由结构,以便不存在此类冲突。您可以使用约束。请记住,默认路由非常急切,如果您不对其进行约束,它通常会优先。

一种可能性是为您的自定义路由定义 Controller 和操作:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.Add("JsActionRoute", JsAction.JsActionRouteHandlerInstance.JsActionRoute);

routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
);

}

然后通过指定要执行的 Controller 和操作来约束自定义路由:

public static readonly Route JsActionRoute = new Route(
"JsAction",
new RouteValueDictionary(new { action = "JsAction", controller = "Foo" })
new JsAction.JsActionHandler()
);

另一种可能性是颠倒路由定义的顺序并限制默认路由:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "^((?!JsAction).)*$", action = "^((?!JsAction).)*$" }
);

routes.Add("JsActionRoute", JsAction.JsActionRouteHandlerInstance.JsActionRoute);
}

关于c# - MVC3路由表错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285023/

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