2011-01-05 8 views
6

क्यों निम्न URL मुझे नीचे आईआईएस त्रुटियों देना है:त्रुटि प्राप्त करना 400/404 - HttpUtility.UrlEncode पूर्ण स्ट्रिंग एन्कोडिंग नहीं है?

ए) http://192.168.1.96/cms/View.aspx/Show/Small+test '

A2) http://192.168.1.96/cms/View.aspx/Show/Small%20test' < - यह काम करता है, लेकिन नहीं() HttpUtility.UrlEncode से परिणाम है

बी) http://192.168.1.96/cms/View.aspx/Show/ '% 26 $% 23funky ** !! ~' ए के लिए '+ पेज

त्रुटि:

HTTP Error 404.11 - Not Found 
The request filtering module is configured to deny a request that contains a double escape sequence. 
बी के लिए

त्रुटि:

HTTP Error 400.0 - Bad Request 
ASP.NET detected invalid characters in the URL. 

के बाद/शो यूआरएल के अंतिम भाग/परिणाम माइक्रोसॉफ्ट को इसे सही ढंग से एनकोड यूआरएल है अनुसार, के बाद पाठ HttpUtility.UrlEncode() इतना के माध्यम से भेजा जा रहा है।

यदि मैं HttpUtility.UrlPnEncode() के बजाय HttpUtility.UrlPathEncode() उपयोगकर्ता को A2 परिणाम प्राप्त करता हूं।

http://192.168.1.96/TVCMS-CVJZ/cms/View.aspx/Show/ '& $ # फंकी ** !! ~' '% 20page

जो अभी भी गलत है: लेकिन बी की तरह लग रही समाप्त होता है। क्या माइक्रोसॉफ्ट जानता है कि एनकोड यूआरएल कैसे करें? क्या कोई ऐसा कार्य है जिसने इसे सही तरीके से करने के लिए लिखा है?

संपादित करें:

मैं अपने खुद के एनकोडर लिखा है:

static public string UrlEncode(string encode) 
{ 
    if (encode == null) return null; 
    string encoded = ""; 

    foreach (char c in encode) 
    { 
     int val = (int)c; 
     if ((val >= 48 && val <= 57) || (val >= 65 && val <= 90) || (val >= 97 && val <= 122)) 
      encoded += c; 
     else 
      encoded += "%" + val.ToString("X"); 
    } 

    return encoded; 
} 

समारोह ठीक बी के लिए परिणाम ऊपर A2 के साथ काम करता है:

http://192.168.1.96/cms/View.aspx/Show/%27%26%24%23funky%2A%2A%21%21~%27%27%20page

लेकिन भले ही यह एक अच्छा वैध यूआरएल आईआईएस जैसा दिखता है फिर भी मुझे

HTTP त्रुटि 400.0 - खराब अनुरोध एएसपी.NET ने URL में अमान्य वर्णों का पता लगाया।

+0

बी पूरी तरह से urlencoded प्रतीत नहीं होता है। – marcog

+0

@marcog - जो मैं भी सोच रहा था, लेकिन इसका नतीजा यह है: PageID = HttpUtility.UrlEncode (पेजआईडी); जहां पेजआईडी = "'और $ # फंकी ** !! ~' 'पृष्ठ' – Justin808

+0

'% 27% 26% 24% 23funky% 2 ए% 2 ए% 21% 21% 7 ई% 27% 27% 20 पृष्ठ' यह होना चाहिए । मुझे नहीं पता कि यह काम नहीं कर सकता है। – marcog

उत्तर

6

ठीक है, मेरे अपने प्रश्न का उत्तर दें ... ऐसा करने से नफरत है लेकिन मुझे खुदाई के बाद जवाब मिला।

http://www.lostechies.com/blogs/joshuaflanagan/archive/2009/04/27/asp-net-400-bad-request-with-restricted-characters.aspx

लंबी और इसके बारे में संक्षेप में अपने सभी महिमा, एक अंतरराष्ट्रीय मानक का पालन करने के लिए नहीं फिर से निर्णय लिया माइक्रोसॉफ्ट है।

%, &, *, या: किसी URL में एन्कोड या डीकोड किए गए यूआरएल में नहीं हो सकता है? किसी कारणवश।

इस मैं अपने ही एन्कोड करें और डिकोड लिखा है चारों ओर पाने के लिए:

static public string UrlEncode(string encode) 
{ 
    if (encode == null) return null; 
    string encoded = ""; 

    foreach (char c in encode) 
    { 
     int val = (int)c; 
     if (val == 32 || val == 45 || (val >= 48 && val <= 57) || (val >= 65 && val <= 90) || (val >= 97 && val <= 122)) 
      encoded += c; 
     else 
      encoded += "%" + val.ToString("X"); 
    } 

    // Fix MS BS 
    encoded = encoded.Replace("%25", "-25").Replace("%2A", "-2A").Replace("%26", "-26").Replace("%3A", "-3A"); 

    return encoded; 
} 

static public string UrlDecode(string decode) 
{ 
    if (decode == null) return null; 
    // Fix MS BS 
    decode = decode.Replace("-25", "%25").Replace("-2A", "%2A").Replace("-26", "%26").Replace("-3A", "%3A"); 

    return HttpUtility.UrlDecode(decode); 
} 

कार्यों का न तो समय पर यूनिकोड के अनुकूल हैं, लेकिन अब के लिए यह काम करता है।

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