2011-11-07 28 views
7

Folks,ASP.NET MVC 3: Đã chuyển ứng dụng vào thư mục ảo. Tôi phải thay đổi điều gì?

Tôi đã làm việc trên ứng dụng MVC 3. Tôi đã sử dụng máy chủ web tích hợp của VS 2010. Hôm nay, vì nhiều lý do, tôi đã được yêu cầu di chuyển nó vào một thư mục ảo và chạy nó dưới IIS 7, vẫn còn trên máy tính phát triển của tôi.

Bây giờ URL của nó là "localhost/MyVirtualDirectory" thay cho "localhost: 12345", tôi cần thay đổi gì để thực hiện công việc định tuyến và ở đâu?

Tôi không sử dụng bất kỳ thẻ hoặc liên kết chuyển hướng HTML thô nào, chỉ cần @ Html.ActionLink và v.v. Theo những gì tôi đã đọc, nếu tôi đã làm mọi thứ theo cách của MVC, sự thay đổi này phải rõ ràng.

Nhưng ngay từ đầu, chuyển hướng sau xác thực không thành công. Xác thực thành công, đó là nghĩa vụ phải trả lại kết quả của

this.RedirectToAction("index", "Home") 

Bạn đoán nó: thay vì "/ MyVirtualDirectory/Home" chuyển hướng đi vào "/ Home". Mà không thành công.

Vì vậy, một số thứ bị thiếu cần được thiết lập. Nó là gì?

Cảm ơn, tất cả.

+0

'RegisterRoutes' của bạn trông giống như Global.asax của bạn như thế nào? –

+0

Bạn có thể cấu hình IIS không chính xác. Điều này phải hoàn toàn minh bạch. –

+0

@DarinDimitrov OK, tôi đã sẵn sàng tin điều đó. Các ứng dụng MVC có phải được thiết lập khác với các ứng dụng WebForms không? –

Trả lời

3

Trong IIS, hãy chọn thư mục ảo của bạn và "Chuyển đổi sang ứng dụng". Ngoài ra, nếu bạn đang sử dụng bản đồ tuyến đường mặc định trong Global.asax của bạn nó nên đọc một cái gì đó như thế này:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

suy luận: Nếu bạn đặt ứng dụng MVC của bạn trong một thư mục con của một ứng dụng khác thì IIS sẽ xem xét gốc của ứng dụng khác thay vì gốc của ứng dụng MVC của bạn. Nếu đó là hành vi mà bạn muốn (không) thì bạn cần phải sửa đổi Global.asax của mình để tính đến điều đó:

routes.MapRoute(
    "Default", // Route name 
    "MyVirtualDirectory/{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 
+0

Cảm ơn bạn rất nhiều. Tuy nhiên, theo IIS thư mục ảo của tôi đã là một ứng dụng. Tôi đã có IIS7.5, và theo mặc định nội dung trang web xem thư mục ảo của tôi có một "loại" của ứng dụng. –

+0

Được rồi, khi bạn viết thư mục ảo trong câu hỏi của mình, tôi lấy đó làm chỉ báo có thể là bạn chưa chỉ định thư mục làm ứng dụng. Bạn có thể kiểm tra cài đặt ứng dụng, v.v. nhưng như đã đề cập trước đây, điều này có thể trở thành một câu hỏi về serverfault.com. –

+0

Tôi đã tìm thấy sự cố của mình, hóa ra đó là một URL có nguồn gốc không chính xác trong một tuyên bố chuyển hướng. Của bạn là một câu trả lời tốt cho câu hỏi, mặc dù - Tôi chỉ xảy ra là sai về những gì đã thực sự xảy ra. Cảm ơn bạn rất nhiều vì đã trả lời! –

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