Đây là kịch bản đã hoạt động trong nhiều năm. Tôi có một ứng dụng web asp.net cha mẹ tại (nói) www.MySite.co.uk và theo nó tôi có nhiều trang con (khách hàng) trong các thư mục ảo, ví dụ: www.MySite.co.uk/Client1 vv Tất cả các trang web (cha mẹ và con thư mục ảo) là các ứng dụng biểu mẫu web asp.net truyền thống sử dụng .NET 4.5 và tất cả các hoạt động tốt.Tôi có thể có các ứng dụng Web ASP.NET truyền thống trong Thư mục ảo trong Trang MVC không?
Hôm qua, tôi đã cập nhật trang web gốc của mình thành ứng dụng web asp.net MVC 5 (được phát triển bởi tôi bởi một freelancer). Tôi chỉ cập nhật trang mẹ và nó đã phá vỡ tất cả các trang con của tôi. Như một sửa chữa khẩn cấp cho điều này tôi đã đổi tên file web.config trong trang web MVC cha mẹ của tôi, rõ ràng điều này đã phá vỡ trang web cha mẹ của tôi, nhưng ít nhất các trang web của khách hàng (con) đang hoạt động trở lại.
Rõ ràng là một cài đặt trong ứng dụng gốc (ứng dụng gốc) mà các trang web dạng web được kế thừa và chúng không thích nó.
Trong nghiên cứu của mình, tôi đã xem qua điều này: http://forums.iis.net/t/1200821.aspx?Creating+virtual+directory+for+ASP+NET+website+under+MVC+application và vì vậy tôi tự hỏi nếu cài đặt được đề cập có liên quan đến tệp MVC RouteConfig.cs của tôi hay không. Freelancer của tôi thiết lập nó để các liên kết cũ đến đường dẫn aspx của tôi vẫn hoạt động (tức là bản đồ cho các chế độ xem mới của tôi). Tôi chưa quen với mã, nhưng đây là một đoạn mã:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "HelpRedirect",
url: "Help/{*route}",
defaults: new { controller = "Help", action = "ViewRedirect" }
);
routes.MapRoute(
name: "AspxRoute",
url: "{controller}/{action}.aspx",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ContactRoute",
url: "Contact.aspx",
defaults: new { controller = "Contact", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Tôi đã thực hiện rất nhiều tìm kiếm, nhưng cho đến nay vẫn chưa thể tìm ra giải pháp. Vì vậy, câu hỏi của tôi là thế này:
- Có thể có trang web asp.net truyền thống trong thư mục ảo dưới trang web MVC?
- Nếu có, tôi nên xem những cài đặt nào? Làm cách nào để ngăn các trang web con thừa hưởng cài đặt sai? Tôi có một cảm giác các thiết lập hoặc là trong web.config hoặc một cái gì đó để làm với RouteConfig.cs ở trên.
Tôi sẽ rất biết ơn nếu có ai có thể chỉ cho tôi đúng hướng, cảm ơn trước.
Cập nhật
cũng Nhìn vào bài này Virtual Directory App within a Asp.net MVC app Tôi đã cố gắng chỉnh sửa web.config trong ứng dụng gốc và gói <location inheritInChildApplications="false">
xung quanh tất cả mọi thứ mà sẽ cho phép nó. Nhưng nó không hoạt động, các trang web của khách hàng vẫn không hoạt động.
Cập nhật 2
Tôi có một phản hồi nào từ freelancer tôi dám nói vậy là về định tuyến và URL vì MVC hy vọng một cái gì đó để được ở/trạm Client1 vv Vì vậy, chúng ta cần phải viết một tuyến đường mà gửi yêu cầu như vậy (tuyến đường cộng thêm một từ) với một bộ điều khiển mà sau đó cần xem liệu đây có phải là một trang trong MVC (ví dụ/trợ giúp) hoặc một trang web khách hàng (ví dụ/Client1) và hiển thị trang thích hợp.
Cá nhân tôi không biết đủ về định tuyến để tự mình thực hiện việc này, nhưng freelancer của tôi là trường hợp đó. Nếu anh ta đưa ra một giải pháp tôi sẽ đăng nó. Tôi vẫn đánh giá cao bất kỳ giải pháp đầu vào hoặc giải pháp thay thế nào khác.
Cập nhật 3
Bây giờ giải quyết! Xin lưu ý, nó không có gì để làm với MVC, đó là một cá trích đỏ. Cảm ơn Greg Burghardt đã chỉ cho tôi đúng hướng với bình luận của mình "Rõ ràng IIS cố gắng kết hợp một thư mục ảo trước, sau đó là một bộ điều khiển MVC".Điều này đúng, có không có vấn đề định tuyến với việc có các trang Web ASP.NET Forms trong các thư mục ảo trong trang web mẹ MVC. Nó liên quan đến vấn đề thừa kế Entity Framework của web.config. Tôi sẽ đăng câu trả lời.
Giả sử bạn có trang web con trong thư mục ảo có tên "/ táo". Bạn sẽ có thể thêm một tuyến đường bỏ qua cho đường dẫn đó: 'routes.IgnoreRoute ("/apples ");'. Hãy thử điều đó. –
@GregBurghardt cảm ơn vì gợi ý, tôi đã thử nó nhưng tôi nhận được ngoại lệ 'URL tuyến đường không thể bắt đầu bằng ký tự '/' hoặc '~' và nó không thể chứa '?' tính cách. Tên thông số: routeUrl'. Ngoài ra, tôi có rất nhiều trang con và danh sách thường thay đổi, vì vậy mã hóa chúng sẽ không lý tưởng - mặc dù tốt hơn cả một trang web bị hỏng, tất nhiên! –
Điều gì về việc xóa ký tự '/'? Có thể bạn có thể thêm một ứng dụngCài đặt với danh sách các trang web khách hàng được phân cách bằng dấu cách. Khi cấu hình tuyến đường được chạy trong MVC, hãy đọc giá trị appSetting, chia nhỏ ký tự khoảng trống và lập trình thêm cấu hình tuyến đường bỏ qua? Sau đó, ít nhất nếu bạn thêm một trang web khách hàng, bạn có thể cập nhật Web.config sẽ khởi động lại ứng dụng. –