2012-08-03 29 views
12

Vì vậy, tôi đã thiết lập một ứng dụng đơn HTML5 và hoạt động tốt. Trang này ở số /App/ và khi một số có nội dung, nó trông giống như /App/Content/1234.Ứng dụng trang đơn trong AngularJS và ASP.Net hoạt động tốt, nhưng khi tôi làm mới trang của mình trong trình duyệt, tôi nhận được lỗi 404

Một vấn đề: Nếu người dùng làm mới trang, máy chủ không thể tìm thấy URL đó vì nó không thực sự tồn tại. Nếu tôi gửi chúng đến /App/#/Content/1234, chúng là vàng, nhưng cách tốt nhất để làm điều này là gì? Tôi có rất nhiều kiểu URL khác nhau trong/Ứng dụng.

Cách tốt nhất để bắt giữ toàn cầu bất kỳ yêu cầu nào theo số ~/App/(.*) và chuyển hướng đến ~/App/#/$1?

Tuyến đường duy nhất được đăng ký trong MVC là tuyến OOTB tiêu chuẩn.

+0

http://tarkus.me/post/32121691785/angularjs-with -asp-net-mvc-4 –

Trả lời

4

Có vẻ như máy chủ của bạn không ghi lại các url vào URL cơ sở của ứng dụng.

Cần viết lại URL trên máy chủ web phụ thuộc vào máy chủ. Đối với Apache, bạn sử dụng mod_rewrite.

Thay vào đó, chuyển Góc sang "Chế độ Hashbang" (mặc định) để các url sẽ lưu trữ trạng thái cục bộ sau số # trong url.

Tôi không muốn ứng dụng của mình yêu cầu thay đổi cấu hình máy chủ, vì vậy tôi khuyên bạn nên sử dụng chế độ băm.

Xem AngularJS docs. Xem phần "Chế độ Hashbang và HTML5" Phần chế độ HTML5 mô tả tất cả các vấn đề cấu hình cần thiết để hỗ trợ chế độ HTML5 cho các url.

+0

Vâng, tôi đã trở lại chế độ băm. Đó không phải là những gì tôi muốn, thực sự, nhưng nó sẽ phải làm cho đến khi tôi đưa ra một giải pháp tốt hơn. Tôi không phải trên Apache không may, yêu cầu là Microsoft Technologies (có thể có thể là một yêu cầu) vì vậy cho đến khi tôi tìm ra một cách tốt để làm điều này trong ASP.Net, hashbangs nó sẽ ở lại. –

+1

Tôi nghe bạn ... phong cách html5 chắc chắn sẽ là ứng dụng trang đơn đẹp nhưng nó chỉ là aint ở đây. Tin tốt là người dùng không tập trung vào url - đó là lý do tại sao các trình duyệt trên điện thoại di động thậm chí không hiển thị nó khi bạn vào trang. Các trình duyệt trên máy tính để bàn cũng sẽ không nhấn mạnh nó trong tương lai. –

+0

Vấn đề tôi gặp phải khi sử dụng phương pháp 'hashbang' là bạn phải cam kết hoàn toàn: bất kỳ liên kết nào bạn có không nên làm mới trang phải bắt đầu bằng băm và hashPrefix đã chọn. OTH, ở chế độ html5, Angular sẽ viết lại liên kết nếu nó phát hiện một trình duyệt cũ. – Schmuli

2

Anh chàng tuyệt vời này mô tả cách sửa lỗi này here.

Tóm lại:

  1. Di nugets MVC (trừ khi bạn sử dụng bộ điều khiển MVC cho bất cứ điều gì) - bạn có thể giữ nugets Web API. Giữ các gói WebPages và Razor. Cũng xóa bộ điều khiển MVC và chế độ xem.
  2. Bạn có thể tiếp tục sử dụng .cshtml tệp với một số sửa đổi web.config. Bạn sẽ cần điều này cho gói .
  3. Cuối cùng, bạn thêm một quy tắc viết lại trên web.config để chỉ tất cả các url (không bao gồm nội dung, hình ảnh, kịch bản vv) index.html