سؤال

بالنسبة لطلب POST، تلقيت ردًا في نص/أتش تي أم أل التنسيق وكان نص الاستجابة يحتوي على المعلومات التالية:

oauth_token=XXXXXXXXXXXXXXXXXXXXXXXX&oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&oauth_callback_confirmed=true

لقد قدمت هذا الطلب من خلال System.Net.Http.HttpClient وأعتقد أنني يمكن أن أقرأ الرد مع FormUrlEncodedMediaTypeFormatter مثل FormDataCollection ولكن تبين ذلك FormUrlEncodedMediaTypeFormatter يدعم فقط application/x-www-form-urlencoded التنسيق بشكل افتراضي.لذلك، عملت على حل هذه المشكلة باستخدام الكود التالي:

using (OAuthHttpClient client = new OAuthHttpClient(creds)) {

    var response = await client.PostAsync(requestUri, new EmptyContent());
    var formatter = new FormUrlEncodedMediaTypeFormatter();
    formatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    var result = await response.Content.ReadAsAsync<FormDataCollection>(new List<MediaTypeFormatter>() { formatter });

}

السؤال هنا هو :

هل يخطئ موفر الرد (في هذه الحالة هو Twitter) بإرسال هذا الرد باسم نص/أتش تي أم أل أو ينبغي FormUrlEncodedMediaTypeFormatter يدعم نص/أتش تي أم أل اكتب افتراضيا؟

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

المحلول

سؤالك يفتقد بعض المعلومات الأساسية مثل.ما هو الطلب الذي من المفترض أن يعيده requestUri افتراضيًا، هل هو خدمة Web API أم خدمة خارجية وما إلى ذلك.يبدو أنها ليست Web API لأنه من الغريب أن تُرجع "text/html".

لكن حقيقة أن FormUrlEncodedMediaTypeFormatter لا يدعم التنسيق مرة أخرى من النص/html أمر جيد تمامًا.لماذا؟يعد "application/x-www-form-urlencoded" قاموسًا فعالاً للقيمة الرئيسية، بينما يعد text/html أحد أنواع الوسائط الغنية.

في Web API، يتم النظر إلى الطريقة التي يعمل بها التفاوض على المحتوى

  1. تعيينات نوع الوسائط (أفترض أنها غير موجودة في حالتك)
  2. قبول الرؤوس - بالنظر إلى طلبك، لم تقم بتعيينها
  3. نوع محتوى الطلب - مرة أخرى، عند النظر إلى طلبك، لم تقم بتعيينه بحيث يكون فارغًا
  4. يمكن للمنسق إجراء تسلسل لنوع معين

لذا، إذا قمت بتقديم الطلب كما أظهرت لأي إجراء Web API، فسوف يُرجع النص/xml (إذا لم تقم بتعديل الاتصال يدويًا).

نصائح أخرى

أتفق مع فيليب على أن هذا يعد عملاً جيدًا لرأس نوع محتوى غير صحيح.

هنريك

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