ASP.NET MVC 动态路由与默认控制器/操作相同
我需要路线来匹配有时控制器,有时 - 数据库值。这是一个示例:
/controller/action?id=test - 这是默认的 {controller}/{action} 路由
/name/type?flag=test - 这是我的自定义 {dbvalue}/{dbvalue} 路由
如您所见,两条路线相同。但是,如果 {controller} 或 {action} 是特定值(仅在运行时知道,因为它取决于数据库) - 我需要路由来匹配我的其他路由(即 /speciccontroller/handleall(string name, string type) action)。
是否可以?
I need routes to match sometimes controllers, and sometimes - database values. Here's an example:
/controller/action?id=test - this is the default {controller}/{action} route
/name/type?flag=test - this is my custom {dbvalue}/{dbvalue} route
As you can see, the two routes are the same. But if {controller} or {action} is a specific value (only known at runtime because it depends on DB) - I need the route to match my other route (i.e. /specificcontroller/handleall(string name, string type) action).
Is it possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好的,答案是实现 IRouteConstraint 以从默认路由接受的 {controller} 值中排除 DB 值。
例如
,当然排除值必须是动态的。
诀窍不是向我的路线添加约束,而是从默认路线中排除这些值。
OK, the answer would be to implement IRouteConstraint to exclude DB values from the {controller} values accepted in the default route.
E.g.
Of course excluded values have to be dynamic.
The trick was not to add constraints to my route, but to exclude the values from the default route.
这尚未经过测试,只是一个想法:
Global.asax:
然后在类
RouteController
内的方法操作Index()
中,检查dbValue1
和dbValue2
。如果不匹配,您可以使用RedirectToRoute("Default", ...)
方法。通过这种方式,任何请求都会首先匹配
DbRoute
,RouteController
将检查db值,如果不匹配,只需将路由转发到Default
并根据控制器/操作渲染视图。This is not tested yet but just an idea:
Global.asax:
then in method action
Index()
inside classRouteController
, you check for thedbValue1
anddbValue2
. If not match, you can useRedirectToRoute("Default", ...)
method.By this way, any request will match
DbRoute
first andRouteController
will check for the db value, if not match simply forward the route to theDefault
and render the view based on controller/action.