2011-04-12 4 views
5

पर मैं ऊपर त्रुटि संदेश प्राप्त करता रहता हूं, भले ही मैं उस पंक्ति को टिप्पणी करता हूं जिस पर त्रुटि हो रही है। कोई जानकारी है कि इसका कारण क्या हो सकता है? मैंने परीक्षण मानों के साथ लाइनों को फिर से लिखने का प्रयास किया है, लेकिन मुझे अभी भी वही त्रुटि मिलती है।"लंबाई शून्य से कम नहीं हो सकती है।" एक रिक्त रेखा

यह डीबग मोड में पूरी तरह से काम करता है, यह केवल तैनाती में ही आया है।

मूल कोड:

Line 21:    string domain, username; 
Line 22:    string text = Page.User.Identity.Name; 
Line 23: 
Line 24:    domain = text.Substring(0, text.IndexOf("\\")); 
Line 25:    username = text.Substring(text.IndexOf("\\") + 1, text.Length - text.IndexOf("\\") - 1); 

Source File: F:\<file path>\Default.aspx.cs Line: 23 

टेस्ट कोड (समान त्रुटि):

Line 21:    string domain, username; 
Line 22:    //string text = "TEST"; // Page.User.Identity.Name; 
Line 23:    // this line is blank 
Line 24:    domain = "TEST"; //text.Substring(0, text.IndexOf("\\")); 
Line 25:    username = "TEST"; // text.Substring(text.IndexOf("\\") + 1, 

Source File: F:\<file path>\Default.aspx.cs Line: 23 

यहाँ स्टैक ट्रेस अगर यह बिल्कुल मदद करता है:

[ArgumentOutOfRangeException: Length cannot be less than zero. 
Parameter name: length] 
System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +12681546 
Insufficiencies._Default.Page_Load(Object sender, EventArgs e) in F:\<file path>\Default.aspx.cs:23 
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25 
System.Web.UI.Control.LoadRecursive() +71 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3048 
+0

कोड की अगली कुछ पंक्तियों में क्या होता है? मुझे लगता है कि त्रुटि वहां है (स्टैक निशान में रेखा संख्या कभी-कभी थोड़ा उलझन में हो सकती है)। –

+0

इससे पहले, कुछ चरों का प्रारंभिकरण और 'उपयोग' टैग का संग्रह, कोई फ़ंक्शन कॉल नहीं है। – Lyise

उत्तर

14

text.IndexOf("\\")-1 लौटने दिया जाएगा अगर यह स्ट्रिंग में "\" नहीं मिल रहा है।

आप -1Substring() विधि से गुजर रहे हैं, जो अमान्य है।

Page.User.Identity.Name एक खाली स्ट्रिंग वापस कर देगा यदि साइट उस साइट के लिए आईआईएस में विशेष रूप से सक्षम विंडोज एकीकृत प्रमाणीकरण के साथ नहीं चलती है।

उपयोगकर्ता अज्ञात प्रमाणीकरण के तहत साइट तक पहुंच सकते हैं।

http://msdn.microsoft.com/en-us/library/ff647405.aspx से

:

Windows प्रमाणीकरण

  • प्रारंभ इंटरनेट सूचना सेवा (आईआईएस) कॉन्फ़िगर करने के लिए।
  • अपने एप्लिकेशन की वर्चुअल निर्देशिका पर राइट-क्लिक करें, और उसके बाद गुणक्लिक करें।
  • निर्देशिका सुरक्षा टैब पर क्लिक करें।
  • बेनामी पहुंच और प्रमाणीकरण नियंत्रण के तहत, संपादित करें पर क्लिक करें।
  • सुनिश्चित करें कि अनाम पहुंच चेक बॉक्स चयनित नहीं है और यह कि एकीकृत विंडोज प्रमाणीकरण केवल चयनित चेक बॉक्स है।
  • अपने एप्लिकेशन की Web.config फ़ाइल में या मशीन-स्तरीय Web.config फ़ाइल में, सुनिश्चित करें कि प्रमाणीकरण मोड विंडोज पर सेट किया गया है जैसा कि यहां दिखाया गया है।

<system.web> ... <authentication mode="Windows"/> ... </system.web>

+0

इसके लिए बहुत कुछ धन्यवाद, मुझे अभी भी एक ही त्रुटि मिल रही है, लेकिन मुझे लगता है कि यह उन अन्य सेटिंग्स में से एक हो सकता है जो मैंने बदल दिया है जो एक ही समस्या को अभी भी प्रकट कर रहा है। मैं सभी सेटिंग्स को रीसेट करने और इसे फिर से करने का प्रयास करने जा रहा हूं। – Lyise

4
text.IndexOf("\\") 

यह वापस आ जाएगी -1 अगर पात्रों के सूचकांक नहीं पाया जाता है, और -1 की लंबाई के साथ चरित्र 0 से सबस्ट्रिंग लेने कि त्रुटि फेंक देते हैं।

एएसपीनेट सी # का एक और चेतावनी यह है कि उप स्ट्रिंग का लम्बा पैरामीटर वास्तविक स्ट्रिंग से भी बड़ा नहीं हो सकता है (क्लासिक एएसपी आपको ऐसा करने देता है)।

इस प्रयास करें:

int SlashPos = text.IndexOf("\\"); 
if(SlashPos > 0) 
    domain = text.Substring(0, SlashPos); 
else 
    domain = text; 
1

आप Substring कॉल में एक नंबर कम से कम शून्य से गुजर रहे हैं।मैं स्ट्रिंग आरंभ के अपने उदाहरण के शक करने के लिए "टेस्ट" एक ही समस्या है ...

4

चर text कोई \\ सबस्ट्रिंग इस प्रकार text.IndexOf("\\") रिटर्न -1 जो ​​वास्तव में Substring के लिए अमान्य तर्क होता है।

इसे ठीक करने के लिए, आप ऐसे कोड का उपयोग कर सकते हैं जो बैकस्लैश नहीं मिलने पर पूरे text असाइन करेगा।

int backSlashIndex = text.IndexOf("\\"); 
domain = (backSlashIndex >= 0) ? text.Substring(0, backSlashIndex) : text; 
संबंधित मुद्दे