2011-02-27 38 views
5

Tôi muốn có url này (/views/shared/_layout.cshtml) tạo mã phản hồi 404 & hiển thị trang 404 tùy chỉnh của tôi. Hiện tại, nó tạo ra lỗi 500 và theo dõi ngăn xếp này:Cách tạo /views/shared/_layout.cshtml trong trang khôi phục trang 404 của Razor

Chi tiết ngoại lệ: System.Web.HttpException: Không thể phân phát các dấu gạch dưới hàng đầu ("_").

Stack Trace: [HttpException (0x80004005):. Tập tin với dấu gạch hàng đầu ("_") không thể được phục vụ] System.Web.WebPages.WebPageRoute.GetRouteLevelMatch (String pathValue, IEnumerable 1 supportedExtensions, VirtualPathFactoryManager virtualPathFactoryManager) +291 System.Web.WebPages.WebPageRoute.MatchRequest(String pathValue, IEnumerable 1 supportedExtensions, VirtualPathFactoryManager virtualPathFactoryManager) 441 System.Web.WebPages.WebPageRoute.DoPostResolveRequestCache (HttpContextBase ngữ cảnh) 222 System.Web.WebPages.WebPageHttpModule.OnApplicationPostResolveRequestCache (Object sender, EventArgs e) 146 System.Web.SyncEventExecutionStep.System.Web.HttpApplication .IExecutionStep.Execute() +220 System.Web.HttpApplication.ExecuteStep (bước IExecutionStep, Boolean & completedSynchronously) 120

+0

Bạn đã tìm ra điều này? Tôi đang cố khắc phục sự cố tương tự –

+0

Danh sách thư mục có được bật vì một lý do nào đó không? –

+0

Nếu có ai gặp vấn đề này với Sitecore, có thể bạn đang thiếu tệp Sitecore.Mvc.config từ thư mục bao gồm của bạn. – Timm

Trả lời

1

Đảm bảo bạn có các thiết lập sau đây trong Views\web.config tập tin của bạn:

<appSettings> 
    <add key="webpages:Enabled" value="false" /> 
</appSettings> 
+0

Điều này đã có trong mẫu MVC 3 trống mặc định mà tôi đang sử dụng và sự cố vẫn tồn tại. Đây là mẫu nuget pkg/trang web Tôi đang cố gắng sửa chữa nó cho: https://github.com/andrewdavey/NotFoundMvc/ – bkaid

0

Nếu bạn đang sử dụng IIS trong chế độ tích hợp, có lẽ chặn ở cấp server:

<system.webServer> 
    <!--- any others here ---> 
    <handlers> 
     <!--- any others here ---> 
     <add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    </system.webServer> 
+0

Tôi đang sử dụng mẫu MVC 3 trống mặc định và BlockedViewHandler đã được ánh xạ tới "*" trong Views \ web.config và System.Web.WebPages vẫn đang xử lý nó và ném ngoại lệ. – bkaid

1

Nếu bạn nhìn vào mã mà ném ngoại lệ: nó xảy ra vì WebPageHttpModule đã kết nối một trình xử lý PostResolveRequestCache cố gắng giải quyết tuyến đường. Sau đó nó phát hiện một đường dẫn không hợp lệ và barfs.

Có thể nếu bạn có thể đăng ký IHttpModule của riêng bạn trước WebPageHttpModule, bạn có thể hành động theo yêu cầu trước trình xử lý PostResolveRequestCache mặc định.

Một tùy chọn khác có thể là móc vào sự kiện Application_Error, sau đó điều tra ngoại lệ và trả lại 404 nếu thích hợp.

0

Đây là một câu hỏi cũ, nhưng trong trường hợp bất kỳ ai có cùng một vấn đề, bạn có thể thử giải pháp này.

Sự cố xảy ra vì tên tệp bắt đầu bằng dấu gạch dưới (khiến cho HTTP 500 trả về). Để giải quyết vấn đề, bạn nên đổi tên tệp để loại bỏ dấu gạch dưới. Bây giờ bạn nên bắt đầu nhận HTTP 404 miễn là bạn có các trang web: Đã bật được đặt thành false trong web.config.

<appSettings> 
    <add key="webpages:Enabled" value="false" /> 
</appSettings> 
0

Tôi không biết, bạn vẫn có câu trả lời đúng hay không.

Hôm nay tôi chỉ đến để biết rằng: ASP.NET trang web đang có một tài sản như -

Ngăn chặn các file đang được duyệt bao

Với ASP.NET, các file với một tên mà bắt đầu bằng dấu gạch dưới không thể duyệt được từ web.

Nếu bạn muốn ngăn chặn nội dung của bạn hoặc các tập tin bố trí từ việc xem bởi người dùng của bạn, đổi tên các tập tin để:

_header.cshtm

_footer.cshtml

_Layout.cshtml

Liên kết để xem thông tin này là: http://www.w3schools.com/aspnet/webpages_layout.asp.

Lưu ý điều này, dấu gạch dưới (_) khi bắt đầu bất kỳ tên tệp nào sẽ được sử dụng để bảo mật các tệp một phần của bạn khỏi duyệt web.

Tôi nghĩ lý do hiện tại rõ ràng đối với bạn.

+1

Egads ... Xin vui lòng không sử dụng hoặc đề nghị W3Schools ... nó được đóng gói với thông tin xấu. –

0

Đối với tôi đó là một thiếu Sitecore.Mvc.config gây ra sự cố như được đề xuất bởi Timm

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