سؤال

أنا أقدم موقع ويب يتم عرضه على أجهزة الهاتف المحمول (الهاتف المحمول). أنا فقط باستخدام HTML 4.01 عادي، لا شيء خاص على الإطلاق. تقدم الصفحات غرامة على جميع متصفحات الأجهزة المحمولة التي اختبرناها، باستثناء سلسلة Nokia 40 1-5th Editions. عند الفحص الأقرب، يبدو أن IIS يجعل HTML تلقائيا مع نوع المحتوى text/vnd.wap.wml بدلا من text/html. وبعد نظرا لأننا لا نستخدم WAP، فافشل الصفحة مع خطأ.

أنا أستخدم ASP.NET MVC 1.0 لذلك أضفت ActionFilterAttribute لتجاوز نوع المحتوى. يعمل هذا الرمز ولكن لا يزال يخرج ك VND.WAP.WML على جانب العميل.
أنا أستخدم هذا doctype؛

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

تجدر الإشارة إلى أن vnd.wap.wml هو الأول Accept-Encoding المحدد بواسطة متصفح الهاتف المحمول، لذلك أفترض أن IIS7 يخدمه لهذا السبب. وأعتقد أن MVC لا يشير على وجه التحديد إلى ملفات .html (أو .aspx)، ربما يتم تخطي نوع MIME؟ أظن أن هذا ربما إصلاح IIS بدلا من إصلاح رمز.

أي مساعدة هي محل تقدير كبير!

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

المحلول

اتضح أنني لم أقوم بتنفيذ ActionFilter بشكل صحيح .. كنت بحاجة إلى تجاوز طريقة OnResultExecuted بالإضافة إلى الطريقة المعنية. تبدو السمة الكاملة مثل هذا (إضافة [htmloverridefilter] إلى وحدات تحكم الخاصة بك عند الحاجة). أمل أن هذا يساعد شخصاما.

internal class HtmlOverrideFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.ContentType = "text/html";
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.ContentType = "text/html";
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top