2010-07-08 24 views
16

Lấy controller action sauTại sao một dấu% 20 (dữ liệu hợp lệ trong trường hợp này) giết asp.net MVC định tuyến

public ActionResult NextBySURNAME(int id, string data) 
    { 
     //code to process the data and edit the id accoringly not written yet 
     return RedirectToAction("Edit", new { id = id }); 
    } 

nếu tôi gọi nó với /MyController/NextBySURNAME/12/Smith% 20Simon

sau đó nó hoạt động tốt (trong này ghi lại chỉnh sửa trường hợp 12) nhưng

/MyController/NextBySURNAME/12/Smith% 20

mang lại cho tôi một 404

Bây giờ tôi biết rằng trong một số trường hợp trong khoảng trắng của miền có vấn đề của tôi có ý nghĩa quan trọng, vì vậy tôi không chỉ muốn cắt nó. Vậy tại sao điều này lại phá vỡ tuyến đường của tôi?

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

Robert: Tôi biết * mã * xảy ra là C# nhưng vấn đề về dấu vết% 20 phá vỡ định tuyến là (có thể) không cụ thể cho ngôn ngữ. Tôi không muốn gắn thẻ cho C# – Andiih

+2

Chà, chỉ cần thử nó, điều đó thật thú vị ... – Aren

+1

@Andiih & Robert: '.net' có thể là thẻ mô tả hơn' C# ', tuy nhiên tôi đã tìm thấy câu hỏi này vì tôi đang tìm kiếm 'C#' – Aren

Trả lời

8

Vì vậy, tôi đã thực hiện một số sửa lỗi tuyến đường và nhận thấy rằng tuyến đường kết thúc bằng khoảng trắng thậm chí không được đánh giá bởi ứng dụng MVC của tôi. Do đó, IIS phải xử lý các yêu cầu này kém.

Tôi đã thêm quy tắc ghi lại vào IIS 7.5 để khớp với khoảng trắng ở cuối và viết lại chúng dưới dạng url giống nhau mà không có khoảng trắng. Tôi không hài lòng với giải pháp này nhưng không thể tìm thấy một giải thích về lý do tại sao IIS xử lý các URL có dấu cách.

+1

Có vẻ như ai đó cần thêm, về cơ bản , một 'Trim()' ở đâu đó bên trong IIS. :) – JYelton

+0

@JYelton & BC, nếu bạn muốn tìm kiếm một dạng gì đó như: '" Hello "' Nếu việc cắt xén xảy ra, điều này sẽ bị phá vỡ. Định tuyến sẽ hoạt động như mong đợi và tạo ra một chuỗi (trong trường hợp OP) của '" Smith "' để anh ta xử lý sau này. – Aren

+0

Tôi đồng ý. Làm thế nào để bạn có được IIS để chơi tốt đẹp? –

1

Tôi nghĩ cách thoát ký tự được xử lý có thể thay đổi trong .NEt 4.0, nhưng tôi chưa tự mình thử. Xem http://msdn.microsoft.com/en-us/library/system.uri.aspx.

Andrews câu trả lời cho URL-encoded slash in URL

Cũng How to create a Uri instance parsed with GenericUriParserOptions.DontCompressPath

Đây là tất cả chỉ hoang dã đoán nhưng có lẽ nó giúp.

+0

Cảm ơn MF. Thông tin hữu ích ở đó, tôi sẽ thử nghiệm với các kỹ thuật, nhưng đáng chú ý là chỉ có% 20 của nó phá vỡ nó, các ký tự thoát khác không có tác dụng tương tự. – Andiih

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