2010-08-04 10 views
6

अपलोड मैं एक बचाव MvcContrib से प्राप्त का उपयोग कर रहा है:में सोच रही थी अनुरोध में ASP.NET चकरा देनेवाला अजाक्स jQuery फ़ाइल के लिए अनुरोध

public class RescueAttribute : MvcContrib.Filters.RescueAttribute 
{ 
    public RescueAttribute(string view) : base(view) 
    { 
     IgnoreAjax = false; 
    } 

    public RescueAttribute(string view, params Type[] exceptionTypes) : base(view, exceptionTypes) 
    { 
     IgnoreAjax = false; 
    } 

    protected override ActionResult CreateActionResult(Exception exception, ExceptionContext context) 
    { 
     var controller = (string) context.RouteData.Values["controller"]; 
     var action = (string) context.RouteData.Values["action"]; 
     var model = new HandleErrorInfo(exception, controller, action); 

     if (context.Controller.ControllerContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      return new JsonResult(model); 
     } 
     return base.CreateActionResult(exception, context); 
    } 
} 

अब जब jQuery.form, Request.IsAjaxRequest में फाइल अपलोड का उपयोग कर() रिटर्न असत्य। जाहिर है ऐसा इसलिए है क्योंकि आप वास्तव में जेसन का उपयोग कर फ़ाइल अपलोड नहीं कर सकते हैं; यह प्लगइन अपलोड करने के लिए एक छिपी आईफ्रेम उत्पन्न करता है।

क्षतिपूर्ति करने के लिए मैं किसी भी रूप है कि jquery.form के साथ प्रस्तुत और फ़ाइल आदानों है करने के लिए एक छिपा इनपुट जोड़कर हूँ:

$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />'); 

यह काफी अच्छा IsAjaxRequest को बेवकूफ बनाने की है। क्या कोई कारण है कि मैं नहीं करना चाहिए?

+1

+1 सख्ती से गंदी हैकिंग – BritishDeveloper

+0

के लिए +1 तो मूल रूप से यह तब सुरक्षित है। –

उत्तर

2

यह विधि ठीक है।

JQuery और अन्य क्लाइंट पुस्तकालयों ने X-Requested-Headers में साथ रखा। हालांकि, एएसपी अजाक्स सहायक आपके द्वारा किए गए छिपे हुए फॉर्म तत्वों का उपयोग करते हैं।

महत्वपूर्ण बात यह है कि IsAjaxRequest() फॉर्म फ़ील्ड और हेडर दोनों की जांच करता है। तो यदि यह एक्स-अनुरोध के लिए XMLHttpRequest पाता है- किसी भी स्थान पर, यह सच हो जाता है।

अच्छी तकनीक। मैं इसे एक दिन इस्तेमाल कर सकता हूं।

संबंधित मुद्दे