سؤال

بعد الأسلوب ، W3 المواصفات تقول:

إذا كان المورد قد تم إنشاؤه في الأصل خادم الرد ينبغي 201 (خلق) و تحتوي على الكيان الذي يصف حالة الطلب يشير إلى مورد جديد ، موقع رأس (انظر القسم 10.4).

http://www.ietf.org/internet-drafts/draft-ietf-httpbis-p2-semantics-05.txt (القسم 8.5)

الاستجابة القياسية في الواقع يبدو أن إرسال Redirect تم إنشاؤه حديثا الموارد.

أنا بناء موقعي مع ASP.NET MVC, وحاول أن تتبع المواصفات ، لذلك خلق ResourceCreatedResult الدرجة:

public class ResourceCreatedResult : ActionResult
{
    public string Location { get; set; }
    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.StatusCode = 201;
        context.HttpContext.Response.ClearHeaders();
        context.HttpContext.Response.AddHeader("Location", Location);
    }
}

و العمل تبدو شيئا مثل هذا:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateNew(string entityStuff)
{
    Entity newEntity = new Entity(entityStuff);
    IEntityRepository entityRepository = ObjectFactory.GetInstance<IEntityRepository>();
    entityRepository.Add(newEntity);

    ActionResult result = new ResourceCreatedResult()
        { Location = Url.Action("Show", new { id = newEntity.Id }) };
    return result;
}

ومع ذلك, IE, فايرفوكس و كروم كل تفشل في إعادة توجيه إلى مورد جديد.لقد افسدت توليد الاستجابة الصحيحة ، أو متصفحات الويب يكن يتوقع هذا النوع من الاستجابة بدلا من ذلك الاعتماد على خوادم بإرسال توجيه الرد ؟

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

المحلول

إعادة توجيه بعد المنصب أو الوظيفة/إعادة توجيه/الحصول على شيء التطبيق الخاص بك يجب أن تكون سهلة الاستعمال.

تحرير.هذا هو يتجاوز HTTP المواصفات.إذا نحن ببساطة العودة 201 بعد آخر ، فإن المتصفح زر العودة يتصرف بشكل سيئ.

علما بأن طلبات "خدمات ويب" (التي لا تستجيب إلى المتصفح) اتبع معيار تماما و لا إعادة توجيه بعد آخر.

يعمل مثل هذا.

  1. المتصفح المشاركات البيانات.

  2. التطبيق الخاص بك بالتحقق من صحة البيانات.إذا كان غير صالح ، تستجيب مع شكل حتى يتمكنوا من إصلاحه بعد.

  3. التطبيق الخاص بك يستجيب مع إعادة توجيه.

  4. يحصل المتصفح على الكمبيوتر لا تحصل.

  5. التطبيق الخاص بك يرى على ويستجيب.

الآن -- مهلا المعزوفة!-- يعمل على الزر مرة أخرى.

نصائح أخرى

لتكون واضحة، المتصفحات (بما في ذلك المتصفحات الحديثة مثل فايرفوكس 3 و IE8) لا "اتخاذ التلميح" ومتابعة استجابة HTTP 201: Created مع طلب GET إلى URI المتوفرة في رأس الموقع.

إذا كنت تريد متصفحات للذهاب إلى URI المتوفرة في رأس الدولة، يجب أن ترسل إلى حالة HTTP 303: See Other بدلا من ذلك.

وبلدي الحل هو الاستجابة مع '201 مكون "يحتوي على صفحة بسيطة مع وصلة إلى مورد جديد، وإعادة توجيه جافا سكريبت باستخدام location.replace ().

وهذا يتيح نفس العمل رمز لطلبات API والمتصفح، يلعب بشكل جيد مع العودة وتجديد أزرار، ويحط بأمان في المتصفحات القديمة.

وكما ورد في المواصفات الرد يجب أن يكون HTTP 201 مع إعادة التوجيه. لذلك ليس إلزاميا للبائع المتصفح لتنفيذ الجواب الصحيح ...

وعليك أن تحاول تغيير رمز 30X لمعرفة ما إذا كان يتم إعادة توجيه بشكل صحيح. إذا كان الأمر كذلك، انها مشكلة المتصفح، وإلا فإنه قد يأتي من التعليمات البرمجية (أنا لا أعرف أي شيء في ASP.NET لذلك لا أستطيع "صحة" الشفرة)

لا ينبغي أن نعول فقط عندما يتم "مكون" شيء، وبالتالي إعادة توجيه بسيط لعمل ينبغي أن يكون كافيا حقا؟

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