【问题标题】:MVC 3 Custom routing from sqlMVC 3 来自 sql 的自定义路由
【发布时间】:2011-01-28 13:46:58
【问题描述】:

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

~/Products/Motherboards/{manufacturer}/{uniqueName}
~/HugeSavings/{uniqueName}
~/Products/{uniqueName} 等。

映射到 ProductsController 中相同的 Display(string uniqueName) 控制器操作。这些 url 模式是动态的,即使它们的顺序或组合规则在设计时未定义,模式的规则或模式的内容可以在运行时更改而无需重新启动应用程序,它们存储在 SQL 中,但是需要缓存。每个模式都有一个目标,它可能是一个典型的 MVC url,比如

产品/展示/{uniqueName}

或类似的直接链接

`http://somestuff.com/stuff.aspx?name={uniqueName}。


我发现的每个解决方案都使用过

RegisteredRoutes.Clear(); 
RebuildRoutes();

这太可怕了,因为要为一种产品(或产品类别)添加一种新模式,我必须在数据库中查询数千种产品及其对应的模式。

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

【问题讨论】:

    标签: asp.net-mvc routing asp.net-mvc-3 asp.net-mvc-routing


    【解决方案1】:

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

    【讨论】:

    • 如果我想删除旧的或修改过的,如何识别它们?仅按模式?例如,我可以为路线添加 ID 吗? (因为模式可以修改,不仅可以添加和删除,而且在保存时我不一定知道旧模式,但我知道正在保存的模式的ID)
    • 您可以通过名称识别路线。 msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    如果您仍然感兴趣,我刚刚回答了一个关于 MVC 中的完全动态路由的非常相似的问题。

    Multilingual URLs with ASP.NET MVC

    【讨论】:

    • 谢谢,但我们终于走了一条不同的路线,我们在 mvc 的路由之前放置了一个 url 重写模块,所以即使设置参数,我也可以让任何(和许多)url 指向特定操作,所以我不再需要动态地在 mvc 中设置路由。看看我的想法stackoverflow.com/questions/6202682/…
    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2011-04-02
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多