ASP根目录的MVC路由

ASP MVC Routing of root directory

我们在同一台服务器上部署了多个 Web 应用程序,需要相互通信。例如IIS的wwwroot文件夹下部署了2个应用程序:Foo和Bar。

问题是:从 Foo 网络应用程序的 FooView.cshtml 视图,我需要调用 Test[=25] 的 MyAction =] 来自 Bar 网络应用程序的控制器。

现在我们必须像这样对 url 进行硬编码:

<a href="\Bar\Test\MyAction?id=100">Test action</a>

如何在路由配置中定义它,以便我们可以使用像Url.Action或Url.Route这样的方法来调用操作?提前致谢。

如果要为应用程序外部存在的操作创建 link,则使用 @Url.Action@Html.RouteLink 没有意义。

助手利用应用程序中存在的路由信息​​并相应地生成相关的 links。路由配置明确限制在路由中定义外部 URL。

如果您经常这样做,您可以轻松地创建自己的 HTML 助手来 link:

namespace System.Web.Mvc.Html
{
    public const string ExternalAppName = "externalapp";

    public static class ExternalHelpers
    {
        public static MvcHtmlString ExternalLink(this HtmlHelper htmlHelper, string externalPath, string linkText)
        {
            var tb = new TagBuilder("a");
            tb.MergeAttribute("href", Path.Combine("/" + ExternalAppName + externalPath));
            tb.SetInnerText(linkText);

            return new MvcHtmlString(tb.ToString());
        }
    }

    // Accepts a controller and action
    public static MvcHtmlString ExternalLink(this HtmlHelper htmlHelper, string controller, string action, int id, string linkText)
    {
        var tb = new TagBuilder("a");
        tb.MergeAttribute("href", Path.Combine("/" + ExternalAppName + "/", controller + "/" + id.ToString()));
        tb.SetInnerText(linkText);

        return new MvcHtmlString(tb.ToString());
    }
}

查看:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@Html.ExternalLink("/home/index", "Click to go to external app!")