سؤال

لا بد لي من نشر بعض المعلمات على عنوان URL خارج شبكتي، وطلب مني المطورون على الجانب الآخر عدم استخدام معلمات HTTP:بدلاً من ذلك، لا بد لي من نشر القيم الأساسية الخاصة بي رؤوس HTTP.

الحقيقة هي أنني لا أفهم حقًا ما يقصدونه:حاولت استخدام منشور يشبه ajax، مع كائنات XmlHttp، وحاولت أيضًا الكتابة في الرأس بشيء مثل

Request.Headers.Add(key,value);

لكن لا أستطيع (استثناء من الإطار)؛لقد حاولت العكس باستخدام كائن الاستجابة مثل

Response.AppendHeader("key", "value");

ثم قم بالتحويل إلى الصفحة...ولكن هذا لا يعمل، كذلك.

أعتقد أن من الواضح أنني عالق هناك، هل من مساعدة؟


يحرر نسيت أن أخبرك أن البيئة الخاصة بي هي .Net 2.0, c#، على Win server 2003.الاستثناء الذي حصلت عليه هو

System.PlatformNotSupportedException was unhandled by user code
  Message="Operation is not supported on this platform."
  Source="System.Web"

يبدو أن السبب في ذلك هو رغبتي المبدئية في Request.Add، فقد نشرت MS قبل عام بعض الإصلاحات الأمنية التي لا تسمح بذلك.

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

المحلول

كما قال @lassevk، لن تنجح عملية إعادة التوجيه.

يجب عليك استخدام فئة WebRequest لإجراء HTTP POST من صفحتك أو تطبيقك.هناك مثال هنا.

نصائح أخرى

هل جربت فئة WebClient؟قد يبدو المثال كالتالي:

        WebClient client = new WebClient();
        NameValueCollection data = new NameValueCollection();
        data["var1"] = "var1";
        client.UploadValues("http://somewhere.com/api", "POST", data);

ألق نظرة على HttpWebRequest.يجب أن تكون قادرًا على إنشاء طلب إلى عنوان URL المعني باستخدام HttpWebRequest.Method = "POST".

يجب عليك نشر المزيد من المعلومات.

على سبيل المثال، هل هذا هو C#؟يبدو الأمر كذلك، ولكن قد أكون مخطئا.

أيضًا، أنت تقول أنك حصلت على استثناء، ما هو نوع الاستثناء ورسالته؟

على أية حال، لا يمكنك إعادة التوجيه إلى صفحة لـ POST، فأنت بحاجة إلى إرسالها من المتصفح، وليس من إعادة توجيه الخادم، لذلك إذا كنت تريد أتمتة هذا، أعتقد أنك ستحتاج إلى إنشاء صفحة html باستخدام علامة نموذج، مع بعض حقول الإدخال المخفية، ثم أرسلها باستخدام جافا سكريبت.

أعتقد أنهم يقصدون أنهم لا يريدون منك استخدام معلمات URL (GET).إذا كنت تستخدم رؤوس http، فلن يتم الاستعلام عن طريق POST بعد الآن.

ما اللغة/الإطار؟

باستخدام Python وhttplib2، يجب أن تكون قادرًا على القيام بشيء مثل:

http = httplib2.Http()
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))

أعتقد أن كائن الطلب لن يقبل سوى مجموعة معينة من الرؤوس المحددة مسبقًا.

يوجد تعداد يسرد جميع رؤوس HTTP المدعومة أيضًا.

لكن لا أستطيع تذكره في هذه اللحظة..سأبحث عنه خلال ثواني...

لقد اختبرت السيناريو الخاص بك باستخدام صفحتين نموذجيتين باستخدام خيار XmlHttpRequest.تتوفر الرؤوس المخصصة في صفحة aspx المنشورة باستخدام XmlHttpRequest.

قم بإنشاء الصفحتين التاليتين.تأكد من وجود صفحة aspx في أحد الحلول، بحيث يمكنك تشغيلها في مصحح الأخطاء وتعيين نقطة التوقف وفحص مجموعة Request.Header.

<أتش تي أم أل>

<الرأس>

&lt; script language="javascript"&gt;

function SendRequest()
{
    var r = new XMLHttpRequest();
    r.open('get', 'http://localhost/TestSite/CheckHeader.aspx');
    r.setRequestHeader('X-Test', 'one');
    r.setRequestHeader('X-Test', 'two');
    r.send(null);

}
&lt; script / &gt;

u003C/head>nu003Cbody style=";text-align:right;direction:rtl">nu003Cform style=";text-align:right;direction:rtl">nu003Cinput type="button" value="Click Me" OnClick="SendRequest();" />nu003C/form>nu003C/body>nu003C/html>


CheckHeader.aspx

باستخدام النظام؛

باستخدام System.Web؛

باستخدام System.Web.UI؛

CheckHeader للفئة الجزئية العامة:System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)
{
    string value = string.Empty;
    foreach (string key in Request.Headers)
        value = Request.Headers[key].ToString();
}

}

رجل..محرر html هذا سيء ..أو لا أعرف كيفية استخدامه..

الاستثناء الذي كنت أواجهه بالأمس كان بسبب محاولتي الغبية للكتابة على رؤوس الصفحة التي تم إنشاؤها بالفعل.

عندما بدأت في إنشاء طلبي باتباع إحدى الطرق المشار إليها هنا، كان بإمكاني كتابة رؤوسي.

أنا الآن أستخدم كائن WebRequest، كما في النموذج المشار إليه بواسطة @sectrean، هنا.

شكرا جزيلا للجميع.صخور StackOverflow :-)

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