数据库驱动的asp.net MVC应用程序

时间:2011-02-03 09:57:30

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

我有一个用Classic ASP(不是.net)编写的CRUD应用程序,它使用loadbalancer DLL将页面请求传送(路由)到相关服务器。

它的工作原理如下:

  1. 有人要求www.mywebsite.com/products

  2. 文件夹index.asp下有一个products,可将请求重定向到:

    http://www1.mywebsite.com/products
    

    http://www2.mywebsite.com/products
    

    基于负载均衡器逻辑。

  3. 另一种情况:

    1. 有人要求www.mywebsite.com/products/details

    2. index.asp文件夹中的子文件夹details下有一个products,可将请求重定向到:

      http://www1.mywebsite.com/products/details
      

      http://www2.mywebsite.com/products/details
      

      基于负载均衡器逻辑

    3. 应用程序的主要问题是每当我添加新页面时,我需要创建一个文件夹和index.asp页面来重定向页面。

      我们有一个CMS数据库,其中包含所有页面的详细信息。所以我想创建一个MVC应用程序来替换现有的Classic ASP应用程序。

      但我没有找到任何数据库驱动的MVC应用程序,我对路由感到困惑。我是否需要为每个主文件夹创建一个单独的路径,或者我应该为所有页面创建一个通用路由。

      任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

您不必仅为URL重写迁移到ASP.NET MVC。

IIS 7确实有一个集成的URL重写模块,ASP.NET 4也包含路由。

无论如何,如果你搜索,例如在Codeplex上,对于ASP.NET MVC项目,你会发现很多都是数据库驱动的。

您无需为每个单独的项目创建单独的路线。想想查询字符串的概念(?id = 15& day = monday)。 URL重写几乎相同。

<强>更新

我已经监督过你所说的经典ASP。

IIS 7中的URL重写模块的构建在经典ASP中也可以正常工作。如果您的IIS版本较旧,则需要第三方ISAPI rewrite module

无论如何,将其切换到ASP.NET MVC;)

答案 1 :(得分:0)

MVC非常适合对路由问题进行排序。 ASP.NET 4也是如此。

然而,你遇到的问题是你不知道问题是否准确。因此,您在MVC中与路由混淆。

因此我建议阅读nerddinners教程。您可以免费获得PDF下载。为了更进一步,请阅读Stephen Sandersons关于MVC 2(或几个月内MVC3)的书。

如果您按照nerddinners教程和Stephen Sanderson的教程,那将使您更好地了解它的工作原理。

简而言之,这就是MVC的工作原理:

在MVC中,您忘记了文件和文件夹。

相反,您拥有控制器和操作。路由将请求映射到正确的控制器和操作。

然后,操作中的代码决定哪个View充满数据(来自数据库或任何地方,无关紧要)。视图只是模板,告诉我们要做什么以及要显示什么数据。

控制器向模型询问他们想要的数据。

即,数据访问全部在模型中完成,与用户界面完全分开。

M:模特 V:观点 C:控制器

以上内容对您来说可能毫无意义。这对ASP经典来说是一种非常不同的心态。

如果你来自旧的ASP,你将有一个长途徒步旅行,但它可以做到。我来自Access。无论如何,阅读书籍,按照教程,看看它是否适合你。

当你准备好了,我们仍然会在这里提供更精确的问题。

答案 2 :(得分:0)

迁移的应用程序中的Asp.net MVC路由

根据您在此处显示的请求,您可以使用默认路线对所有内容进行排序:

{controller}/{action}/{id}

在您的情况下,您将拥有ProductsController,其中包含您需要的所有操作。

负载平衡应用程序

但拥有Asp.net MVC应用程序只是其中的一部分。此应用程序将在两个负载平衡服务器上运行。所有重定向都应该在之前完成MVC应用程序。

如果您打算继续使用相同的loadbalancer DLL,您可以创建一个只有一个路由定义的不同Asp.net MVC应用程序:

{*path}

以及完成所有操作的单个控制器和操作:

public Load: Controller
{
    public ActionResult Balance(path)
    {
        // decide for web server and attach path to subdomain
    }
}

只要此操作的开销非常小,这应该可以正常工作。否则,您的负载平衡逻辑将成为您的应用程序的瓶颈,因为所有请求都通过此负载均衡器(现在也是如此,所以请记住现在没有什么不同;更别关注您可能正在使用的不同子域上的身份验证过程)

负载均衡替代

您应该考虑使用IIS 7上的Web场平衡功能,这些功能将在多个Web服务器上运行您的应用程序(因为这是您的负载平衡首先做的事情)。在Web上搜索Web场信息。你可以从这开始:

http://www.iis.net/download/webfarmframework