2011-01-28 42 views
1

我正在开发一个带有MVC 3前端的CMS/Webshop引擎。我希望能够为动态内容/产品运行时定义url“别名”,并且我希望能够将此URL路由到MVC控制器操作。
例如,我想能够定义MVC 3从sql定制路由

〜/产品/主板/ {制造商}/{uniqueName}
〜/ HugeSavings/{uniqueName}
〜/产品/ {uniqueName}等

映射到ProductsController中的相同Display(字符串唯一名称)控制器操作。这些URL模式是动态的,即使它们的顺序或组合物没有定义在设计时的规则,图案的规则或模式的内容,而无需重新启动应用程序在运行时可以改变,它们存储在SQL,但需要缓存。每个图案具有可以是一个典型的MVC URL等

产品/显示/ {uniqueName}

或类似

`HTTP的直接链接的目标:// somestuff。 COM/stuff.aspx?名称= {} uniqueName。


我发现用

RegisteredRoutes.Clear(); 
RebuildRoutes(); 

这是可怕的,因为这将一种新模式的一个产品(或产品类别)我要在数据库中查询每个解决方案数以千计的产品及其相应的模式。

那么,我可以在不清除或重新启动应用程序的情况下更改路线吗?我可以“注入”一些逻辑到路由而不必重新编码整个“查看控制器和动作并解析参数”的东西。

回答

1

是的,您可以稍后添加路线。请先不要RegisteredRoutes.Clear();

+0

如果我想删除旧的或修改的,我怎么能识别他们?只按图案?例如,我可以为路线添加一个ID吗? (因为模式可以修改,不仅可以添加和删除,并且在保存时我不会知道旧模式,但我知道要保存的模式的ID) – TDaver 2011-01-28 13:52:35

+0

您可以按名称标识路由。 http://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.aspx – jfar 2011-01-28 13:54:44