如何在ASP.NET MVC中表示分层组织的URL

时间:2010-01-13 23:08:39

标签: c# asp.net-mvc

假设我有一个如下所示的网址:

http://www.mysite.com/area/topic/subtopic/subsubtopic

其中主题和子主题的数量是任意的。

有没有办法在ASP.NET MVC中处理这种URL?

3 个答案:

答案 0 :(得分:1)

我认为唯一的方法是将区域映射到{controller},将主题映射到{action},然后子主题就必须是操作的参数。

MVC确实将您限制为控制器与动作的二维数组。

答案 1 :(得分:1)

您可以使用通配符路由将任意数量的参数传递给操作,例如比如"../{topic}/{subtopics*}"。然后,URL中主题后面指定的所有内容将按原样传递给操作的参数,然后您可以将该值拆分为单独的子主题。

Scott Guthrie在35:20左右在this video中提到了这种技巧。

答案 2 :(得分:1)

我们使用反射和调用方法完成此操作。

我们已经为IIS添加了一个自定义的.net 404处理程序,这个处理程序获取了url的部分并按照

的方式调用它们
namespace area{

class topic 
{

void subtopic(param object[] subsubtopic)
{
 //do page
}    
}

}

显然,网址到方法签名的确切映射会有所不同。

所以mydomain.com/pages/blogs/newblogs/tech 或者mydomain.com/pages/blogs/newblogs/health

可能看起来像

namespace pages{

class blogs 
{

void newblogs(string subject)
{
 if(subject == "tech")
  subject = "ace";
 if(subject == "health")
  subject = "itch it";
}    
}

}

您可能还想查看restful urls