加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 具有复杂路径的ASP.Net MVC – 如何保持“理智”

发布时间:2020-12-16 04:25:58 所属栏目:asp.Net 来源:网络整理
导读:我有一个客户希望使用URL命名约定: /{subjectarea}/{subject}/{action} 这很好 – 这个工作非常出色,每个主题区域有一个控制器,并且在id(主题)之后执行操作完全没有问题. 然而,它变得复杂,因为客户端然后想要进一步继续层次结构: /{subjectarea}/{subject}
我有一个客户希望使用URL命名约定:
/{subjectarea}/{subject}/{action}

这很好 – 这个工作非常出色,每个主题区域有一个控制器,并且在id(主题)之后执行操作完全没有问题.

然而,它变得复杂,因为客户端然后想要进一步继续层次结构:

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

我有一个控制器用于紧密相关的主题(它只是另一个主题区域),它处理所有管理员方面,但客户端坚持让公共视图挂起父主题而不是它自己的根.

我怎么能这样做,同时避免破坏MVC的整个原则,并避免重新实现我的主题区域控制器中的大量ASP.Net MVC提供的功能,只是为了能够处理来自同一控制器的相关主题?

是否有可能以某种方式从父主题控制器中调用相关主题控制器,并返回结果视图(因为这将保持主题功能与其自己的控制器的分离)?如果可能的话,它将解决很多问题.

解决方法

这是解决我的问题的解决方案 – 希望它解决了别人的问题.

正如我对Robert Harvey的评论所提到的,我实际需要的是另一条不使用前两个或三个组件作为控制器,动作和id的路径,而是从后来获取这些值 – 如果你把它挂起来的话路线中的静态值也更容易做到.

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

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

满足此URL的路由如下:

routes.MapRoute(
            "RelatedSubjects","{parentcontroller}/{parentsubject}/related/{controller}/{id}/{action}",new { controller = "shoes",action = "view",id = "all" }
        );

在后续的控制器操作中,我可以请求parentcontroller和parentsubject的参数值,这样我就可以过滤掉相关的项目,使其特定于给定的父主题 – 问题解决了!

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

我可以在没有/ related / static部分的情况下完全执行此操作,因为路径可以轻松地匹配数量的值,事实上我可能确实这样做了 – 但是,我认为如果有一个静态项目,以后管理会更好确认使用该路线.

我希望这可以帮助别人!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读