2011-01-14 37 views
6

Tôi đã thấy rằng IIS gặp sự cố khi cho phép dấu hai chấm vào URL. Tôi cũng thấy các đề xuất mà những người khác đã cung cấp here.ASP.NET MVC Colon trong URL

Với trang web tôi đang làm việc trên, tôi muốn để có thể vượt qua tiêu đề của phim ảnh, sách, vv, vào URL của tôi, đại tràng bao gồm, như thế này:

mysite.com/Movie/Bob:The Return 

này sẽ được tiêu thụ bởi ví dụ của tôi là MovieController, dưới dạng một chuỗi và được sử dụng xa hơn xuống dòng.

Tôi nhận ra rằng dấu hai chấm không phải là lý tưởng. Có ai có bất cứ đề nghị nào khác không? Là người nghèo như hiện nay, tôi đang làm một tìm và thay thế từ tất cả các dấu hai chấm (:) để một nhân vật khác, sau đó một thay thế ngược khi tôi muốn tiêu thụ nó vào cuối điều khiển.

+0

Tại sao bạn sử dụng dấu hai chấm? Bạn có thấy điều này hoạt động trên các máy chủ khác với IIS không? Tôi muốn đại tràng thậm chí không được phép xác định số cổng bởi vì nó sẽ làm cho việc phân tích cú pháp giao thức đơn giản hơn nhiều. Sử dụng dấu gạch nối, dấu gạch dưới hoặc ký tự khác. Hoặc làm cho nó một cấp độ khác như 'mysite.com/Movie/Bob/The + Return'. –

+0

Vấn đề với việc làm 'mysite.com/Movie/Bob/The + Return' sẽ tìm ra cách lấy tiêu đề phim (" Bob: The Return ") và biết" Hey, có một dấu hai chấm ở đây trong tiêu đề. .. Tôi cần phải đặt nó lại với nhau đúng cách. " –

+0

Có lẽ tôi nên vượt qua trong một lớp học có cả hai tiêu đề và slug trong nó thay vì chỉ tiêu đề phim như là một chuỗi? –

Trả lời

3

Cân nhắc URL encoding and decoding tiêu đề phim của bạn.

Bạn muốn kết thúc với foo.com/bar/Bob%58The%20Return

Là một thay thế, hãy cân nhắc tận dụng một HTML helper to remove URL unfriendly characters in URLs (phương pháp là URLFriendly()). Lợi ích của SEO giữa dấu hai chấm và một trình giữ chỗ (ví dụ: dấu gạch ngang) có thể sẽ không thể bỏ qua.

+9

Tôi đã cố gắng thực hiện mã hóa/giải mã. IIS dường như vẫn thấy điều đó và nói, "Này, vẫn còn là dấu hai chấm. Ném 400 lỗi!" –

0

Đại tràng là ký tự dành riêng và không hợp lệ trong URI theo số RFC 3986. Vì vậy, không làm điều gì đó vi phạm các đặc điểm kỹ thuật. Bạn cần phải mã hóa URL hoặc sử dụng một ký tự khác. Và đây là số nice blog post bạn có thể xem.

+0

Ở đâu nó nói rằng nó không hợp lệ? Tôi có giải thích điều này không chính xác không? pchar = unreserved/pct-mã hóa/sub-delims/":"/"@" – darkangel

0

Cách đơn giản nhất là sử dụng System.Web.HttpUtility.UrlEncode() khi tạo url và System.Web.HttpUtility.UrlDecode khi diễn giải kết quả quay lại. Bạn cũng sẽ gặp sự cố với ký tự khoảng trắng nếu trước tiên bạn không mã hóa giá trị.

2

Một trong những lo lắng lớn nhất với cách tiếp cận của bạn là tên phim không phải lúc nào cũng độc đáo (ví dụ: "Công việc của người Ý"). Ngoài ra những gì về các ký tự ilegal khác (ví dụ: dấu ngoặc vv).

Có thể nên sử dụng số id trong url để định vị phim trong cơ sở dữ liệu của bạn. Bạn vẫn có thể bao gồm một url thân thiện với bản sao của tên phim trong url của bạn, nhưng bạn sẽ không cần phải lo lắng về việc quay trở lại tiêu đề ban đầu với tất cả các ký tự không hợp lệ trong nó.

Ví dụ tốt là url cho trang này. Bạn có thể thấy rằng loại bỏ các tiêu đề của trang vẫn hoạt động:

ASP.NET MVC Colon in URL

ASP.NET MVC Colon in URL

+0

Đây là một ý tưởng thú vị. Tôi sẽ phải xem xét điều này. –

6

tôi giải quyết vấn đề này bằng cách bổ sung này để web.config của tôi:

<httpRuntime requestPathInvalidCharacters=""/> 

này phải nằm trong phần system.web.

Giá trị mặc định là:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/> 

Vì vậy, để chỉ làm một ngoại lệ cho đại tràng nó sẽ trở thành

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/> 

Đọc thêm tại địa chỉ: http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

Đối với những gì tôi hiểu nhân vật đại tràng được chấp nhận là ký tự không được mã hóa trong URL. Tôi không biết tại sao họ thêm nó vào mặc định của requestPathInvalidCharacters.

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