Tworzę nowy projekt w Visual Studio przy użyciu szablonu SPA. Moim celem jest posiadanie aplikacji Angular/SPA, która będzie "hostować"/zawierać niektóre starsze aplikacje, które ostatecznie zostaną zmodernizowane/zmigrowane. Tak więc mam element iframe na stronie w mojej aplikacji SPA, a po kliknięciu elementu menu chcę załadować jedną ze starszych aplikacji ASP.NET w tym elemencie iframe (musi to być element iframe, jako starsza witryna używał ich, a ich architektura opiera się na nich). Mam problem z prawidłowym routingiem. Szablon SPA definiuje klasę defaultroute tak (zmieniłem RouteExistingFiles na true):Nie można poprawnie obsłużyć routingu w mieszanym środowisku VS
public class DefaultRoute : Route
{
public DefaultRoute()
: base("{*path}", new DefaultRouteHandler()) {
this.RouteExistingFiles = true;
}
}
i ja edytowany plik RouteConfig.cs ignorować "aspx" żądania stron, na przykład:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes) {
routes.Ignore("*.aspx");
routes.Add("Default", new DefaultRoute());
}
}
handler domyślna trasa, która jest zdefiniowana, wygląda następująco:
public class DefaultRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
// Use cases:
// ~/ -> ~/views/index.cshtml
// ~/about -> ~/views/about.cshtml or ~/views/about/index.cshtml
// ~/views/about -> ~/views/about.cshtml
// ~/xxx -> ~/views/404.cshtml
var filePath = requestContext.HttpContext.Request.AppRelativeCurrentExecutionFilePath;
if (filePath == "~/") {
filePath = "~/views/index.cshtml";
}
else {
if (!filePath.StartsWith("~/views/", StringComparison.OrdinalIgnoreCase)) {
filePath = filePath.Insert(2, "views/");
}
if (!filePath.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase)) {
filePath = filePath += ".cshtml";
}
}
var handler = WebPageHttpHandler.CreateFromVirtualPath(filePath); // returns NULL if .cshtml file wasn't found
if (handler == null) {
requestContext.RouteData.DataTokens.Add("templateUrl", "/views/404");
handler = WebPageHttpHandler.CreateFromVirtualPath("~/views/404.cshtml");
}
else {
requestContext.RouteData.DataTokens.Add("templateUrl", filePath.Substring(1, filePath.Length - 8));
}
return handler;
}
}
struktura katalogów jest tak:
MySPA
SPA < - zawiera aplikację SPA (.NET 4.5)
Legacy < - zawiera starszych aplikacji (.NET 3.0)
W IIS, I ustawić starszy folder jako katalog wirtualny (podkatalog) w aplikacji SPA.
Jak skonfigurować routing, aby po kliknięciu elementu menu i wysłaniu żądania (zawierającego adres URL z informacją o ciągu zapytania) dla strony .aspx, żądanie może zostać przekierowane do aplikacji starszej wersji ?