【问题标题】:Programmatically rewriting URL to a root application以编程方式将 URL 重写为根应用程序
【发布时间】:2014-11-19 05:52:38
【问题描述】:

我正在尝试将所有控制器操作从子 MVC 应用程序路由到根 MVC 应用程序。 我的目标是将子应用程序中对“帐户”控制器的所有请求转发到根应用程序。

我尝试使用 Context.RewritePath,但出现异常:“虚拟路径映射到另一个应用程序,这是不允许的。”

Context.RewritePath("/Account/" + action);

我可以解决此问题的唯一方法是在我的 web.config 中定义 URL 重写规则,但我不喜欢这种方法,因为这必须在很多应用程序中进行和维护。

有人知道在根应用程序中重写 URL 的方法吗?

P.S:如果它能让我达到这个结果,我不介意使用 MVC 路由。

BRGDS

【问题讨论】:

  • 我很确定您面临的问题是 IIS 将根据路径选择应用程序。因此,根应用程序将永远没有机会捕获请求并重定向到自身。
  • 当然,但我正在尝试将子应用程序设置为重定向到父应用程序。

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


【解决方案1】:

当然,但我正在尝试将子应用程序设置为重定向到父应用程序。

我认为最简单的方法是做类似的事情(这里有一堆假设):

http://www.myapplicationc.com/childapp/controller/action/1

public class RedirectController : Controller
{
  public ActionResult ToParentApplication()
  {
     var destination = Request.Url.AbsoluteUri.Replace("/childapp", string.Empty);
     return Redirect(destination);
  }
}

然后您可以根据需要模块化添加路由:

routes.MapRoute(
  "Redirect1",
  "Account/{*pathInfo}",
  new { controller = "Redirect", action = "ToParentApplication" }
);

或包罗万象:

routes.MapRoute(
  "Catch All",
  "{*pathInfo}",
  new { controller = "Redirect", action = "ToParentApplication" }
);

【讨论】:

  • 您好,感谢您的建议。我尝试了您的方法,但不幸的是我需要发出 URL 重写,而不是重定向。还有其他想法吗?
  • 如果您必须进行重写,则必须使用 IIS Url Rewriter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2013-12-15
  • 2012-09-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多