ASP.NET MVC的基础控制器

3
有没有一种方法可以创建一个基础控制器实现来处理所有路由?
例如,/home/index 和 /about/index 都指向一个控制器方法并返回视图。
我正在构建的网站有90%的静态内容,我不想去创建50个控制器。
只需要一个就可以了吗?

请提供10个示例路由列表,以便更准确地了解您的问题。仅有2个路由是不够的。 - Pure.Krome
4个回答

1

请记住,“控制器”和“操作”是路由系统进行动态处理的关键字。如果您只是将路由中的“控制器”参数替换为其他参数名称,您始终可以使用默认控制器。

routes.MapRoute("Default",
                "{whatever}/{action}/{id}",
                new { controller="Home", action="Index", whatever="", id="0" } );

请注意每个方法都应该处理“whatever”参数。

以下是編程相關內容的中文翻譯,僅返回翻譯後的文字:事情是這樣的:routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // 帶參數的 URL new { controller = "Base", action = "Index", id = "" } // 參數默認值 );所有路由都會命中 BaseController,但類似 "/site-faq/banking-faq" 的路由沒有被命中。 - john
你不能只是定义更多的路由来捕获它们吗? /{任何}/{操作}。 /{任何}/{操作}/东西/{更多的东西*}。请记住,您应该按从最具体到最不具体的顺序放置路由。 - womp
routes.MapRoute( "排行榜", "site-promotions/site-leader-board", new { controller = "Base", action = "Index" } );但是当我访问 /site-promotions/site-leader-board 时,它从未触发基础控制器的索引方法。 - john
路由测试器工作了吗?它说它会命中基本控制器,但实际上并没有。 - john

1

我理解你想要保持简单的愿望,但根据我的经验,你总是需要预期一定程度的变化。如果我处在你的情况下,我会这样做:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Index", new { controller = "Main" });
    }
}

public class AboutController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Index", new { controller = "Main" });
    }
}

public class MainController : Controller
{
    public ActionResult Index()
    {
        // Do something important.
        // Do something else important.
        return View();
    }
}

为了创建AboutController,我只需复制HomeController并将类名更改为AboutController。这样,您可以将路由维护工作最小化,将要集中的行为集中在一起,仍然可以适应不断变化的需求,并且无需撤消许多解决方法。如果经过一段时间后,您必须更改特定操作的行为,则只需转到该操作并更改代码即可。

0

由于您不会基于URL映射到控制器或方法,因此您只需要捕获一些参数,然后对它们进行操作。

 routes.MapRoute( 
     "MyNewRoute", 
     "{firstParameter}/{secondParameter}",
     new {controller="Home", action="Index"} 
 ); 

 public ActionResult Index(string firstParameter, string SecondParameter)
 {
     if (firstParameter == "Home")
     {
        // Do something
     }
 }

我认为“-”符号破坏了路由。 - john

0

通过在global.asax文件中使用适当的路由,您可以实现这一点。但是,随着时间的推移,对于重构或任何原因,您管理网站将变得困难。以下是学习ASP .NET MVC中路由的链接:http://www.asp.net/learn/mvc/#MVC_Routing


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接