2015-06-12 31 views
10

Đâ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:

  1. Có thể có trang web asp.net truyền thống trong thư mục ảo dưới trang web MVC?
  2. 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.

+0

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 đó. –

+0

@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! –

+0

Đ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. –

Trả lời

1

Cuối cùng đã giải quyết được!

Câu trả lời là có, nó là hoàn toàn tốt để có các trang web biểu mẫu web ASP.NET truyền thống trong các thư mục ảo trong thư mục mẹ của trang MVC. Không có vấn đề định tuyến, vì IIS tìm kiếm các thư mục ảo trước tiên, trước khi xem xét định tuyến MVC.

Sự cố mà tôi đã gặp phải liên quan đến việc thừa kế tệp web.config. Với trang MVC mới, lần đầu tiên tôi giới thiệu Entity Framework. Vì vậy, tập tin web.config của tôi chứa các phần sau:

Chánh MVC Web.config

<configSections> 

    <!-- various other sections ... --> 

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 

</configSections> 

Bây giờ các trang web hình thức web con tôi đã có các thiết lập tương tự, và nó quay ra nó không phải là cho phép được chỉ định nhiều hơn một lần xuống phân cấp. Tôi biết về thẻ <location inheritInChildApplications="false"> để ngăn chặn sự kế thừa, nhưng sau khi thử nghiệm, tôi đã phát hiện ra điều này không thể được sử dụng trên phần <configSections>. Tôi cũng đã thử các thẻ <clear /> trong Web.config con, nhưng điều này dường như không hoạt động trong <configSections> hoặc. Vì vậy, sau khi theo dõi this answer cho một vấn đề tương tự, tôi đã giải quyết nó bằng cách bình luận ra các phần Khuôn khổ thực thể khác nhau trong Web.config con của tôi và sử dụng ràng buộc bất thường để khắc phục vấn đề phiên bản (trang mẹ của tôi đang sử dụng Phiên bản 6) , nhưng các trang con tôi đang sử dụng Phiên bản 5).

Web trẻ em.cấu hình Snippets liên quan:

<configSection><entityFramework> phần chú thích:

<configSections> 
<!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />--> 

<entityFramework> phần chú thích:

<!--<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework>--> 

Ràng buộc trong phần thời gian chạy luôn luôn sử dụng phiên bản 5:

<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
    <dependentAssembly> 
    <!-- This is to get this Virtual Directory to use EF5 even if parent uses EF6 --> 
    <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="5.0.0.0" /> 
    </dependentAssembly> 

Đó là một chút của một giải pháp lộn xộn như các trang web hình thức web trẻ em của tôi không phải là tất cả trong một thư mục ảo bên dưới trang web mẹ MVC, vì vậy trong những trường hợp các phần Entity Framework của Web.config sẽ cần phải được un -nhiều. Nếu bất cứ ai biết một giải pháp neater, mà sẽ làm việc bất kể trang web mẹ (hoặc thiếu nó), xin vui lòng chia sẻ.

0

Vui lòng thử phương pháp dưới đây nếu tôi đã nhận được câu hỏi chính xác. Visual studio chính nó cung cấp một tùy chọn để tạo các thư mục ảo và ánh xạ vào IIS.

Vui lòng làm theo bước 1 và bước 2, có thể sẽ hữu ích nếu tôi có câu hỏi đúng.

STEP 1 enter image description here

  1. Chọn tùy chọn "Web" trong bảng điều khiển bên trái
  2. Trên màn hình trung tâm, chọn "LocalIIS" tùy chọn từ DropDownList
  3. cung cấp các đường dẫn ảo cho bạn ứng dụng trong văn bản hộp như
  4. http://localhost/YourAppName 5. nhấp vào CreatevirtualDirectory
+0

Cảm ơn, nhưng tôi không chắc chắn làm thế nào biến ứng dụng MVC địa phương của tôi thành một thư mục ảo sẽ giúp tôi? Tất cả các ứng dụng của tôi chạy tốt tại địa phương, nhưng nó chỉ trên máy chủ sản xuất mà chúng được thiết lập như là ứng dụng gốc với các thư mục con ảo và đó là nơi phát sinh vấn đề. –

Các vấn đề liên quan