2008-12-09 16 views
6

मैं आपको एक विधि प्राप्त करने के लिए पैरामीटर के रूप में यूआरएल पास करने की कोशिश कर रहा हूं। मैंने एक रूट को परिभाषित किया है जो एक {* url} पैरामीटर स्वीकार करता है, इसलिए मैं अपने पैरामीटर को अलग किए बिना वर्णों को "/" भेज सकता हूं। जैसे ही यूआरएल में ":" है (जैसे http: या localhost: 3857 उदाहरण के लिए), विधि कभी हिट नहीं होती है।पैरामीटर प्राप्त करने के रूप में यूआरएल पास करें?

एचटीएमएल.एक्शनलिंक विधि अपने पैरामीटर से बच निकलती है, लेकिन यह ':' से बचने लगती नहीं है। मैं इसे मैन्युअल रूप से नहीं बचा सकता क्योंकि तब से बचने वाले पात्र एक ही एचटीएमएल से बच जाते हैं। एक्शनलिंक विधि।

कोई विचार?

उत्तर

3

इसे पार करने से पहले EncodeUrl का उपयोग करें, और उसके बाद इसे दूसरी तरफ डीकोड करें।

+0

मुझे किसी भी EncodeUrl के बारे में पता नहीं है (मुझे यह कहां मिल सकता है) लेकिन मैंने HttpUtility.UrlEncode और HttpUtility.UrlPathencode का प्रयास किया। वे दोनों मुझे एक (गैर मौजूदा) गंतव्य फ़ाइल में रूट करने के बजाय अंततः मेरी विधि :( –

+0

HtmlTextWriter.EncodeUrl – Kieveli

+0

HtmlTextWriter.EncodeUrl विधि निर्दिष्ट URL में रिक्त स्थान "% 20" में स्थानांतरित करके न्यूनतम URL एन्कोडिंग करता है। रिक्त स्थान मेरी समस्या नहीं हैं –

0

यह एक हैक का थोड़ा सा है, लेकिन आप ':' को '% 3A' (जो बच निकला हुआ फॉर्म) से बदल सकते हैं, और देखें कि एक्शनलिंक इसके साथ क्या करता है। यदि यह एक बार फिर से बच निकला है, तो आपको सर्वर पर दो बार से बचने वाले संस्करण को ':' पर ​​बदलना होगा, अन्यथा बस '% 3A' को ':

1

पर एक ही समस्या में भाग गया। मैं Html.ActionLink को हटाने के समाप्त हो गया और साथ बदल दिया:

<a href="[email protected]">@item.Title</a> 

@ item.ID एक यूआरएल Netflix एपीआई, उदाहरण के http://api.netflix.com/catalog/titles/series/70021357/seasons/70021357 से लौटे है। अब मेरा यूआरएल इस तरह दिखता है - /Home/Movies?id=http://api.netflix.com/catalog/titles/series/70021357/seasons/70021357, और मैंने अभी नियंत्रक में मान प्राप्त करने के लिए Request.QueryString का उपयोग किया :

Request.QueryString.Get("id") 

शायद आदर्श नहीं है लेकिन यह अभी के लिए काम करता है।

संबंधित मुद्दे