سؤال

أقوم بإنشاء كائن httpwebrequest من صفحة أخرى من ASPX لحفظ دفق الاستجابة لمخزن البيانات الخاص بي. عنوان URL الذي أستخدمه لإنشاء كائن httpwebrequest يحتوي على QueryString لتقديم الإخراج الصحيح. عندما أتصفح الصفحة باستخدام أي متصفح قديم ، فإنه يجعله بشكل صحيح. عندما أحاول استرداد دفق الإخراج باستخدام HTTPWebResponse.getResponsestream () ، فإنه يجعل فحص الخطأ المضمّن الخاص بي.

لماذا ستقدم بشكل صحيح في المتصفح ، ولكن لا تستخدم كائنات httpwebrequest و httpwebropsebonse؟

هنا هو شفرة المصدر:

رمز وراء الصفحة المستهدفة:

protected void PageLoad(object sender, EventsArgs e)
{
   string output = string.Empty;

   if(Request.Querystring["a"] != null)
   {
      //generate output
      output = "The query string value is " + Request.QueryString["a"].ToString();
   }
   else
   {
      //generate message indicating the query string variable is missing
      output = "The query string value was not found";
   }

   Response.Write(output);
}

رمز وراء الصفحة إنشاء كائن httpwebrequest

string url = "http://www.mysite.com/mypage.aspx?a=1";
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url)

//this if statement was missing from original example
if(User.Length > 0)
{
    request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");
    request.PreAuthenticate = true;
}

request.UserAgent = Request.UserAgent;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Stream resStream = response.GetResponseStream();  
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(resStream, encode, true, 2000);
int count = readStream.Read(read, 0, read.Length);
string str = Server.HtmlEncode(" ");

while (count > 0)
{
    // Dumps the 256 characters on a string and displays the string to the console.
    string strRead = new string(read, 0, count);
    str = str.Replace(str, str + Server.HtmlEncode(strRead.ToString()));
    count = readStream.Read(read, 0, 256);
}

// return what was found
result = str.ToString();

resStream.Close();
readStream.Close();

تحديث

David MCEWING - أقوم بإنشاء httpwebrequest مع اسم الصفحة الكاملة. لا تزال الصفحة تولد إخراج الخطأ. قمت بتحديث عينة الكود في الصفحة المستهدفة لإظهار ما أقوم به بالضبط.

chris lively - أنا لا أعيد التوجيه إلى صفحة خطأ ، أقوم بإنشاء رسالة تشير إلى أنه لم يتم العثور على قيمة سلسلة الاستعلام. لقد قمت بتحديث مثال الكود المصدري.

تحديث 1:

حاولت استخدام Fiddler لتتبع httpwebrequest ولم يظهر في نافذة تاريخ جلسات الويب. هل أفتقد شيئًا ما في الكود المصدري للحصول على طلب ويب كامل.

تحديث 2:

لم أقم بتضمين القسم التالي من التعليمات البرمجية في المثال الخاص بي وكان الجاني يسبب المشكلة. كنت أضع Credentials خاصية HttpWebRequest مع حساب Sevice بدلاً من حساب الإعلان الذي يسبب المشكلة.

لقد قمت بتحديث مثال رمز المصدر الخاص بي

هل كانت مفيدة؟

المحلول 3

أحتاج إلى استبدال السطر التالي من التعليمات البرمجية:

request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");

مع:

request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

نصائح أخرى

ما هو خادم الويب الذي تستخدمه؟ أستطيع أن أتذكر في مرحلة ما من ماضي عند القيام بشيء ما مع IIS كانت هناك مشكلة حيث تم إعادة التوجيه بين http://example.com/ و http://example.com/default.asp أسقط سلسلة الاستعلام.

ربما قم بتشغيل Fiddler (أو بروتوكول Sniffer) ومعرفة ما إذا كان هناك شيء لا تتوقعه.

تحقق أيضًا مما إذا كان تمرير اسم الصفحة الكاملة يعمل. إذا فعل ما سبق هو بالتأكيد المشكلة.

اختياريا ، يمكنك محاولة استخدام lellyaUtoredirect خاصية httprequestobject.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top