سؤال

سوف ASP.NET MVC 2.0 الآن، بشكل افتراضي، قم بإلقاء استثناء عندما يحاول الإجراء لإرجاع JSON استجابة لطلب الحصول عليه. أعلم أن هذا يمكن تجاوزه على طريقة الأسلوب حسب الطريقة باستخدام jsonrequestbehavior.athallownet، ولكن هل من الممكن تعيين على وحدة تحكم أو أساس أعلى (ربما web.config)؟

تحديث: في تعليق ليفي، هذا ما انتهى به الأمر

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
    return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
هل كانت مفيدة؟

المحلول

هذا، مثل إعدادات MVC الأخرى الخاصة، غير مستقر عبر Web.config. ولكن لديك خياران:

  1. قم بتجاوز تحكم Controller.json (كائن أو سلسلة أو ترميز) الزائد للاتصال بالاتصال JSON (كائن أو سلسلة، ترميز، JSONREQUESTBEHAVIOR)، تمر jsonrequestbehavior.allown كما الحجة الأخيرة. إذا كنت تريد أن تنطبق هذا على جميع وحدات التحكم، فقم بذلك داخل فئة وحدة تحكم قاعدة مجردة، ثم تحتوي على جميع فرق التحكم في جميع المراقبين

  2. قم بعمل طريقة ملحق Myjson (وحدة التحكم هذه، ...) التي تنشئ JSONRESULT ووضع الخصائص المناسبة، ثم اتصل بها من جهاز التحكم الخاص بك عبر هذا. myjson (...).

نصائح أخرى

هناك خيار آخر. استخدام مرشحات العمل.

قم بإنشاء ActionFilterTattribute جديد، وتطبيقه على وحدة التحكم الخاصة بك أو إجراء معين (حسب احتياجاتك). هذا يجب أن يكفي:

public class JsonRequestBehaviorAttribute : ActionFilterAttribute
{
    private JsonRequestBehavior Behavior { get; set; }

    public JsonRequestBehaviorAttribute()
    {
        Behavior = JsonRequestBehavior.AllowGet;
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var result = filterContext.Result as JsonResult;

        if (result != null)
        {
            result.JsonRequestBehavior = Behavior;
        }
    }
}

ثم تطبيقه مثل هذا:

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2 Block JSON للحصول على طلبات لأسباب أمنية. إذا كنت ترغب في تجاوز هذا السلوك، تحقق من التحميل الزائد ل JSON الذي يقبل المعلمة JSONREQUESTBEHAVIOR.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

حصلت أيضا على هذا الخطأ عندما أقوم أولا باستخدام MVC 2.0 باستخدام الرمز القديم الخاص بي في MVC 1.0. يمكنني استخدام FIDLLER لتحديد سبب الخطأ. راجع الخطوات حول كيفية استكشاف الأخطاء وإصلاحها باستخدام Fidder -

http://www.rodcerrada.com/post12/07/11/jquery-getjson()-ds-not-tirgger-the-callback-in-aspnet-mvc-2.aspx.

هل هذه هي المشكلة الأمنية كانت MVC2 تحاول معالجة؟http://haacked.com/archive/2009/06/25/json-hijacking.aspx.

إذا كان الأمر كذلك، يبدو أن مشكلة عدم الحصانة ليست سوى مشكلة إذا كنت تحاول إجراء مكالمة JSON إلى موقع خارجي. إذا كان تطبيق MVC2 الخاص بك يجعل JON فقط يدعو إلى موقع الويب الخاص بك الخاص (لملء JQGrids على سبيل المثال)، ألا يجب أن تكون قادرا على تجاوز مكالمة JSON بأمان في وحدة التحكم الأساسية الخاصة بك للاستسلام دائما؟

ما عليك سوى تغيير رمز JSON من:

$.getJson("methodname/" + ID, null, function (data, textStatus)

ل:

$.post("methodname/" + ID, null, function (data, textStatus)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top