У меня, казалось бы, странная проблема с ASP.NET MVC.
Мы создали веб-сайт для клиентов X и развернули его на своем сервере.Первая проблема заключается в том, что он находится за Novel Access Manager, поэтому все запросы к странице проходят:
https://portal.customerx.com/intranet/tool/{and здесь начинается мой маршрут для MVC}
По этой причине я настроилGlobol.asax вот так:
routes.MapRoute(
"SubfolderZielsetzung", // Route name
"intranet/tool" + "{controller}/{action}/{objectOneId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId" } // Parameter defaults
);
Теперь я попросил добавить на домашней странице гиперссылку на статический сайт, который находится в их внутренней сети:
https://portal.customerx.com/asdf/foo/bar/1337/test-1
если я просто добавлю на домашнюю страницу следующие теги HTML:
<a href="https://portal.customerx.com/asdf/foo/bar/1337/test-1">Support</a>
Итак, теперь происходит странная вещь.Вот что будет отображаться из движка:
<a href="https://portal.customerx.com/intranet/tool/asdf/foo/bar/1337/test-1">
По какой-то причине, и я не могу получить ответ, почему движок маршрутизации изменяет мою гиперссылку, даже если я не использую Html Helpers и задаюПрефикс URL после "https://portal.customerx.com/"
EDIT
Вчера я написал, что нашел ответ, но, как оказалось, он тоже не был ответом.
Я поставил следующий маршрут наверху Global Asax в качестве подсказки из этой статьи: Asp.net MVC и перенаправление на внешний сайт
routes.MapRoute(
"RedirectSiteRoute",
"{site}",
new { },
new { site = new SiteRouteConstraint() }
);
и:
public class SiteRouteConstraint : IRouteConstraint
{
public bool Match(System.Web.HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
string[] allowedSites = new[] { "https://portal.customerx.com/intranet/tool/asdf/foo/bar/1337/test-1" };
return allowedSites.Any(x => x == values[parameterName].ToString());
}
}
Затем я переместил все маршруты с префиксом URL в конец глобального asax, так что теперь все мои маршруты без URL_Prefix были наверху.
Вот как этовыглядело так:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"RedirectSiteRoute",
"{site}",
new { },
new { site = new SiteRouteConstraint() }
);
routes.MapRoute(
"Grundauftrag", // Route name
"{controller}/{action}/{objectOneId}/{objectTwoId}/{objectThreeId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId", objectThreeId = "objectThreeId" } // Parameter defaults
);
routes.MapRoute(
"Zielsetzung", // Route name
"{controller}/{action}/{objectOneId}/{objectTwoId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{objectOneId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId" } // Parameter defaults
);
routes.MapRoute(
"SubfolderGrundauftrag", // Route name
Const.URL_PREFIX + "{controller}/{action}/{objectOneId}/{objectTwoId}/{objectThreeId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId", objectThreeId = "objectThreeId" } // Parameter defaults
);
routes.MapRoute(
"SubfolderZielsetzung", // Route name
Const.URL_PREFIX + "{controller}/{action}/{objectOneId}/{objectTwoId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId" } // Parameter defaults
);
routes.MapRoute(
"Subfolder", // Route name
Const.URL_PREFIX + "{controller}/{action}/{objectOneId}", // URL with parameters
new { controller = "Home", action = "Index", objectOneId = "objectOneId" } // Parameter defaults
);
}
С этим на платформе клиента статическая ссылка работала нормально, но теперь все остальные ссылки на моей странице больше не работали ...
Мне пришлосьпоместите маршруты с URL_Prefix обратно наверх, чтобы он снова заработал, но теперь, конечно,статическая ссылка больше не работает.
Есть идеи?