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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 具有复杂路径的ASP.Net MVC – 如何保持“理智”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个客户希望使用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部分的情况下完全执行此操作,因为路径可以轻松地匹配数量的值,事实上我可能确实这样做了 – 但是,我认为如果有一个静态项目,以后管理会更好确认使用该路线.

我希望这可以帮助别人!

猜你在找的asp.Net相关文章