从ASP.NET WebApplication到ASP.NET MVC WebApplication的UrlRewriting

时间:2010-06-17 19:29:05

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

我在ASP.NET MVC 1的迁移过程中有一个ASP.NET Web窗体应用程序。 网址如下:

hxxp://domain/Default.aspx (WebForms)

hxxp:// domain / mvc / Controller / Action (MVC)

(hxxp因为stackoverflow认为它们是链接并阻止我发布这么多内容)

“mvc”是IIS7中我网站内的另一个应用程序。

我现在需要能够做到这一点:

hxxp:// domain / subsiteName /Default.aspx (WebForms) hxxp:// domain / subsiteName / mvc / Controller / Action (MVC)

其中' subsiteName '可以是任何内容,必须在运行时检查。我无法为每个 subsiteName 创建目录。

我想到了UrlRewriting,所以/ subsiteName / *重写为/ *,但是我必须从WebForms重写为MVC。

我无法想象在这种情况下,MVC应用程序可以采用一种方式向 hxxp:// domain / subsiteName / mvc / 提出请求。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

以下是在Managed Fusion URL Rewriter中编写以下内容的方法,它使用Apache mod_rewrite语法:

  

我现在需要能够这样做:   hxxp://domain/subsiteName/Default.aspx   (WebForms的)   hxxp://域名/ subsiteName / MVC /控制器/行动   (MVC)

RewriteRule /(.*)/Default.aspx   /$1/mvc/Controller/Action

但是我假设您还没有像这样设置所有目录,因此您需要某种方式告诉MVC subsiteName是参数或您的方法。那么你在路线上会做的是:

routes.MapRoute(
    "Default",
    "/{siteName}/mvc/{controller}/{action}",
    new { controller = "Home, action = Index }
);

这将采用重写路径并将其合并到标准HomeController中。然后说索引动作你会有这样的事情:

public ActionResult Index (string siteName) { ... }

然后以特殊方式处理siteName。显然,这是关于如何处理此问题的简化示例,但如果您需要,您也可以使用自定义视图引擎处理此问题,该引擎根据站点名称路由到不同的模板。或者,如果您不希望在每个方法上都使用siteName,则可以将其从路径变量中拉出来。

基本上在完成上述设置之后,如果这真的是你想要的结构,有很多方法可以解决这个问题,你只需要找到当前代码最容易使用的方法。