พารามิเตอร์เข้ารหัส URL ใน ActionLink?

ฉันมีเส้นทางที่ลงทะเบียนไว้ดังต่อไปนี้

        routes.MapRoute(
            "LocationsByArea",                                              
            "Locations/{system}/{storage}/{area}",          
            new { controller = "StorageLocation", action = "Index" },
            null
        );

... และโค้ดต่อไปนี้ในมุมมองของฉัน

<%= Html.ActionLink("Platser", "Index", "StorageLocation", new { system = Model.System, storage = Model.Storage, area = item.Name }, null)%>

ปัญหาของฉันคือเมื่อ "area = item.Name" มีเครื่องหมายทวิภาค เช่น "พื้นที่ 4:1" ถ้าฉันคลิกลิงก์ที่แสดงผล ฉันจะได้รับข้อผิดพลาด HTTP 400 คำขอไม่ถูกต้อง ฉันเดาว่าฉันต้องเข้ารหัสพารามิเตอร์พื้นที่ของฉันด้วยวิธีใดวิธีหนึ่ง แต่ฉันไม่สามารถเข้าใจได้ ความช่วยเหลือใด ๆ ที่ชื่นชม

ขอบคุณ!


person Erik Z    schedule 30.11.2009    source แหล่งที่มา


คำตอบ (3)


การเข้ารหัส/ถอดรหัสในตัวไม่ทำงาน ดังนั้นฉันขอแนะนำให้คุณม้วนของคุณเอง เช่นนี้

namespace MyProject.Helpers
{
    public static class JobNameHelper
    {
        public static string JobNameEncode(string jobname)
        {
            return jobname.Replace(":", "---colon---");
        }

        public static string JobNameDecode(string jobname)
        {
            return jobname.Replace("---colon---", ":");
        }

    }
}
person Kjensen    schedule 06.09.2010

อย่าเพิ่งใช้ได้ไหม.

Server.UrlEnconde(item.Name)

หรือฉันขาดอะไรบางอย่างไป?

ในการกำหนดเส้นทางของคุณคุณอาจต้องใช้ Server.UrlDecde เช่นกันแม้ว่าฉันคิดว่ามันควรถอดรหัสให้คุณตามคำขอ

ลองใช้ Routing Debugger เพื่อดูว่า URL คืออะไร เราเตอร์กำลังถูกส่งผ่าน จากนั้นคุณจะเห็นได้ว่าการถอดรหัสต้องเกิดขึ้นที่ใด

person Sheff    schedule 30.11.2009
comment
ฉันคิดว่าคุณจะต้อง UrlDecode กลับมาที่อีกด้านหนึ่งเมื่ออ่านกลับออกมา คุณได้ลองสิ่งนี้แล้วหรือยัง? - person Sheff; 30.11.2009
comment
ใช่ ฉันมี แต่ฉันไม่สามารถเข้าถึงตัวควบคุมได้ - person Erik Z; 30.11.2009
comment
ดูเหมือนว่าการถอดรหัสจะต้องเกิดขึ้นที่การกำหนดเส้นทาง ลองใช้ดีบักเกอร์การกำหนดเส้นทาง (ฉันได้อัปเดตคำตอบแล้ว) - person Sheff; 30.11.2009

ASP.NET 3.5 SP1 และรุ่นก่อนหน้ามีข้อจำกัดหลายประการว่า URL ใดที่ถูกต้อง ใน ASP.NET 4 ปัญหาเหล่านี้ส่วนใหญ่ได้รับการแก้ไขแล้ว (หรืออย่างน้อยก็ปรับแต่งได้ผ่าน web.config) ฉันคิดว่าอักขระโคลอน แม้ว่าจะเข้ารหัสแล้ว อาจไม่ได้รับอนุญาตใน ASP.NET 3.5 SP1 และรุ่นก่อนหน้า เนื่องจากข้อกังวลด้านความปลอดภัย การอนุญาตให้ใช้เครื่องหมายทวิภาคอาจเป็นปัญหาด้านความปลอดภัยเมื่อดำเนินการตรวจสอบไฟล์ เนื่องจากเป็นไวยากรณ์ที่ไม่ค่อยมีใครรู้จักสำหรับ NTFS Alternate Data Streams.

ฉันแนะนำให้ลองเลือกอักขระอื่นที่ไม่ใช่โคลอนเพื่อจุดประสงค์เหล่านี้ บางทีเครื่องหมายจุลภาค อัฒภาค หรือเครื่องหมายเท่ากับอาจใช้แทนได้

person Eilon    schedule 01.12.2009