gpt4 book ai didi

asp.net-mvc - 具有复杂路由的 ASP.Net MVC - 如何保持 "sane"?

转载 作者:行者123 更新时间:2023-12-04 08:45:39 24 4
gpt4 key购买 nike

我有一个客户希望按照以下方式使用 URL 命名约定:

/{subjectarea}/{subject}/{action}

这很好 - 这非常有效,每个主题区域有一个 Controller ,并且在 id(主题)之后执行操作完全没有问题。

但是,它会变得复杂,因为客户端想要进一步继续层次结构:
/{subjectarea}/{subject}/{action}/{tightlyrelatedsubject}/{tightlyrelatedsubjectvariables}/{tightlyrelatedsubjectaction}

我有一个用于处理所有管理方面的紧密相关主题(它只是另一个主题区域)的 Controller ,但客户端坚持让公共(public) View 卡在父主题而不是它自己的根。

我怎样才能做到这一点,同时避免破坏 MVC 的整个原则,并避免在我的主题区域 Controller 中重新实现大量 ASP.Net MVC 提供的功能,以便能够处理来自同一 Controller 的相关主题?

是否可以从父主题 Controller 中以某种方式调用相关主题 Controller ,并返回结果 View (因为这会将主题的功能分离到他们自己的 Controller )?如果这是可能的,它将解决很多问题。

最佳答案

这是解决我给定问题的解决方案-希望它可以解决其他人。

正如我在对 Robert Harvey 的评论中所提到的,我真正需要的是另一条路线,它不使用前两个或三个组件作为 Controller 、 Action 和 id,而是从稍后获取这些值 - 如果你把它卡在路由中的静态值也是如此,它更容易做到。

所以,这是我决定简化路线的网址:

/{subjectarea}/{subject}/related/{tightlyrelatedsubject}/{tightlyrelatedsubjectvariables}/{tightlyrelatedsubjectaction}

满足这个 URL 的路由如下:
        routes.MapRoute(
"RelatedSubjects",
"{parentcontroller}/{parentsubject}/related/{controller}/{id}/{action}",
new { controller = "shoes", action = "view", id = "all" }
);

在随后的 Controller 操作中,我可以请求 parentcontroller 和 parentsubject 的参数值,这样我就可以过滤掉相关项目,只针对给定的父主题 - 问题解决了!

该路由需要高于仅处理前两个值的路由,否则您将面临另一个路由映射劫持请求的风险。

我可以完全不使用/related/静态部分来做到这一点,因为路由可以很容易地单独匹配值的数量,事实上我确实可以这样做 - 但是,如果其中有一个静态项目,我认为它更适合以后的管理确认路线的使用。

我希望这可以帮助别人!

关于asp.net-mvc - 具有复杂路由的 ASP.Net MVC - 如何保持 "sane"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556831/

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