2010-01-29 4 views
8

(यह एक और संकीर्ण प्रश्न है)क्यों अनुरोध .QueryString ["ReturnUrl"] यूआरएल में मौजूद होने पर भी शून्य लौट रहा है?

मेरी एएसपीनेट एमवीसी कार्रवाई में, मैं देख रहा हूं कि रिटर्न यूआरएल मान यूआरएल में है या नहीं।

मेरे यूआरएल इस तरह दिखता है:

http://localhost:56112/user/login?ReturnUrl=/user/settings 

मेरी कार्रवाई में, मैं अगर उस क्वेरी स्ट्रिंग मूल्य मौजूद रहा हूँ, और यह शून्य लौटा रहा है ?? यह कैसे हो सकता है?

कोड:

if(Request.QueryString["ReturnUrl"] != null) 
{ 

} 

आवेदन के माध्यम से ट्रेसिंग, यह सिर्फ अगर बयान के शरीर अर्थात यह NULL है लंघन है।

यह कैसे समझाया जा सकता है?

अद्यतन

नियंत्रक कि जाँच करता है, तो उपयोगकर्ता के लॉग इन किया है, मैं एक ActionFilter ऐसा दिखता है जैसे है में:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 
     // some stuff 
     string loginUrl = FormsAuthentication.LoginUrl + "/user/settings; 

     context.Response.Redirect(loginUrl); 
    } 
+0

मैं सिर्फ एक त्वरित परीक्षण भाग गया, और यह मेरे लिए ठीक काम किया।क्या आप किसी भी कस्टम http हैंडलर या पसंद कर रहे हैं? –

+0

इसे भी देखें: http://stackoverflow.com/questions/1783059/query-string-with-slashes-not-working-in-asp-net-mvc –

+0

@jacerhea मेरे पास एक कस्टम फ़िल्टर है जो करता है लॉगिन पेज पर रीडायरेक्ट करें। – Blankman

उत्तर

3

debugging कोड का प्रयास करें - आप में देखने के लिए सक्षम होना चाहिए QueryString पैरामीटर की पूरी सूची डीबगर करें, ताकि आप देख सकें कि आपने इसे याद किया है या नहीं।

+0

मेरा क्वेरीस्ट्रिंग संग्रह खाली है, लेकिन मैं URL में ReturnUrl =/user/सेटिंग्स देख सकता हूं। – Blankman

+1

क्या आप Request.RawUrl स्ट्रिंग प्राप्त कर सकते हैं और सत्यापित कर सकते हैं कि अनुरोध में क्वेरी स्ट्रिंग के साथ पूर्ण यूआरएल है? –

+0

Request.RawUrl में क्वेरीस्ट्रिंग नहीं है। बहुत अजीब, ब्राउज़र में यूआरएल हालांकि करता है ?? – Blankman

1

बस एक ही मुद्दे में भाग गया।

अनुरोध। RawUrl सही है, ब्राउजर को सबमिट यूआरएल क्वेरीरीस्ट्रिंग गायब है। पृष्ठ के लिए दृश्य स्रोत देखें, और अपने फॉर्म तत्व की क्रिया विशेषता पर यूआरएल सत्यापित करें। आपको लगता है कि QueryString गुम है।

शायद यह हो रहा है कि आप @ Html.BeginForm का ओवरलोड लोड कर रहे हैं जो रूटव्यू पैरामीटर लेता है। "रूटवैल्यूज़" के साथ किसी भी ओवरलोड का उपयोग करने से एक नया रूटिंग यूआरएल उत्पन्न होगा और किसी भी क्वेरीस्ट्रिंग पैरामीटर को पट्टी कर देगा। मेरे मामले में, मैं enctype विशेषता जोड़ना चाहता था और केवल अधिभार के लिए मार्गों को निर्दिष्ट करने की आवश्यकता है। मुझे लगता है कि यह एमवीसी 3 में एक निरीक्षण है।

हालांकि, आप अभी भी अपना खुद का फॉर्म टैग पुराने तरीके से लिख सकते हैं। एमवीसी 3 के लिए स्रोत कोड को देखते हुए, ऐसा प्रतीत होता है कि Html.BeginForm के लिए बेस अधिभार अनुरोध.RawUrl का उपयोग करता है।

निम्नलिखित का प्रयास करें:

<form action="@Request.RawUrl" method="post" enctype="multipart/form-data"> 
0

मैं नौसिखिया Asp.Net MVC डेवलपर के रूप में एक ऐसी ही समस्या थी। समस्या एक लॉगिन फॉर्म था जो फॉर्म को अपने विशिष्ट नियंत्रक को पोस्ट कर रहा था। तो गायब क्वेरी स्ट्रिंग मान बहुत सामान्य हैं। चूंकि फॉर्म एक्शन विशेषता एक्शन = "/ इंडेक्स/लॉगिन"

मेरे द्वारा लागू किया गया समाधान क्वेरी स्ट्रिंग से मूल्य के साथ मेरे रूप में एक छिपे हुए फ़ील्ड को जोड़ना है। इसे ActionResult या मॉडल में पैरामीटर के रूप में जोड़ा जाना चाहिए।

@Html.Hidden("returnUrl", Request.QueryString["returnUrl"]) 

एक अन्य समाधान की तरह प्रपत्र कार्रवाई url करने के लिए इसे पारित करने के लिए है:

@using (Html.BeginForm("login", "contr", new {returnUrl = Request.QueryString["returnUrl"]})