我在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 / 提出请求。
有什么想法吗?
答案 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
,则可以将其从路径变量中拉出来。
基本上在完成上述设置之后,如果这真的是你想要的结构,有很多方法可以解决这个问题,你只需要找到当前代码最容易使用的方法。