درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات مطلب
      مدرس/نویسنده
      علی شکرالهی
      امتیاز: 514
      رتبه:2230
      0
      5
      1
      8
      دوره های مرتبط
      دوره های توسینسو دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 17 قسط خریداری کنید
      با خرید این دوره مبلغ 5,445 تومان هدیه بگیرید
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 11 قسط خریداری کنید
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 17 قسط خریداری کنید
      با خرید این دوره مبلغ 8,470 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      مدرس: ایمان جوادی
      این دوره را در 13 قسط خریداری کنید
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      مدرس: مهدی عادلی فر
      این دوره را در 2 قسط خریداری کنید
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      مدرس: امیر حسین فضلیخانی
      این دوره را در 12 قسط خریداری کنید
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 27 قسط خریداری کنید
      با خرید این دوره مبلغ 8,110 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
      دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 23 قسط خریداری کنید
      با خرید این دوره مبلغ 7,425 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 78 قسط خریداری کنید
      با خرید این دوره مبلغ 82,245 تومان هدیه بگیرید
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      مدرس: کاظم تقندیکی
      این دوره را در 20 قسط خریداری کنید
      با خرید این دوره مبلغ 7,040 تومان هدیه بگیرید
      دوره آموزشی ساخت ربات تلگرام
      دوره آموزشی ساخت ربات تلگرام
      مدرس: کاظم تقندیکی
      این دوره را در 8 قسط خریداری کنید
      دوره آموزشی طراحی رابط کاربری با JavaFX
      دوره آموزشی طراحی رابط کاربری با JavaFX
      مدرس: حسام رسولیان
      این دوره را در 13 قسط خریداری کنید
      دوره آموزشی Exploit نویسی به زبان Perl
      دوره آموزشی Exploit نویسی به زبان Perl
      مدرس: ایمان جوادی
      این دوره را در 7 قسط خریداری کنید
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      مدرس: کاظم تقندیکی
      این دوره را در 11 قسط خریداری کنید

      TipTip - پذیرش درخواست های Ajax یی و رد سایر درخواست ها در ASP.NET MVC

      تاریخ 84 ماه قبل
      نظرات 2
      بازدیدها 106
      سلام .به عنوان اولین مقاله قصد دارم که یک سری مقاله رو آغاز کنم با عنوان TipTip که در هر سری ، یک یا چند نکته در زمینه ی وب رو بررسی میکنم.در ASP.NET MVC ، مفهومی با عنوان Action Filters وجود داره که این امکان رو به ما میده تا بتونیم عملیات فراخوانی Action ها رو کنترل کنیم .Attribute یی با نام ActionFilterAttribute وجود داره که دارای چهارتابع به شکل زیر هست:

      public virtual void OnActionExecuting(ActionExecutingContext filterContext)
      {
      }
      
      public virtual void OnActionExecuted(ActionExecutedContext filterContext)
      {
      }
      
      public virtual void OnResultExecuting(ResultExecutingContext filterContext)
      {
      }
      
      public virtual void OnResultExecuted(ResultExecutedContext filterContext)
      {
      }
      
      

      OnActionExecuting ، قبل از اجرای Action فراخوانی می شه و OnActionExecuted بعد از فراخوانی اون .همینطور تابع OnResultExecuting ، قبل از اجرای تابع Execute مربوط به Result فراخوانی میشه ، و OnResultExecuted بعد از اجرای آن.فرض کنید که ما کنترلری با نام Home داریم که داخل اون یک Action به نام Test تعریف شده:
      public class HomeController : Controller
      {
              public ActionResult Test()
              {
                  return View();
              }
      }
      

      یعنی ما می تونیم اکشن Test رو از طریق مرورگر به شکل زیر فراخونی کنیم:
      http://domain.com/Home/Test
      

      وقتی این درخواست به وب سرور می رسه ، بعد از اینکه عملیات روتینگ انجام شد ، اکشن Test فراخونی میشه ، عملیات داخلیش انجام شده و بعد یک خروجی از نوع ActionResult رو برمیگردونه .کاری که ما قصد داریم انجام بدیم این هست که تنها درخواستهایی رو بپذیریم که بصورت Ajaxیی ارسال شده باشن. یعنی در Header ارسالی کلید X-Requested-With با مقدار XMLHttpRequest وجود داشته باشه .برای اینکار یک کلاس جدید با نام AjaxRequest ایجاد میکنیم که از ActionFilterAttribute ارث بری کنه :
      public class AjaxRequest : ActionFilterAttribute
      {
          
      }
      
      

      چون ما میخوایم قبل از اجرای Action بررسیمون رو انجام بدیم ، پس تابع OnActionExecuting رو Override میکنیم و کد زیر رو داخلش قرار میدیم:
      public override void OnActionExecuting(ActionExecutingContext filterContext)
      {
          if (filterContext.HttpContext.Request.IsAjaxRequest()) return;
      
          filterContext.Result = new ContentResult();
      }
      

      کاری که کد بالا انجام میده ، قبل از فراخوانیه اکشن ، بررسی میکنه که آیا این درخواست یک درخواست Ajax یی هست یا نه .در صورتی که باشه ، کارش رو ادامه میده ، در غیر این صورت پراپرتی Result مربوط به filterContext رو برابر با ContentResult میکنه .این کار باعث میشه ، تا فراخوانی اکشن Test متوقف بشه . چون بعد از پایان تابع OnActionExecuting بررسی میشه که آیا Result مقداری گرفته یا نه. در صورتی که مقداری گرفته باشه ، صرفا همون Result رو اجرا میکنه و دیگه اکشن فراخوانی نمیشه .در اینجا من یک ContentResult رو ست کردم ، بدین معنی که یک صفحه ی خالی براش ارسال میشه ، شما ممکنه بخواید Exception یی رو throw کنید . روش ها متفاوت است .کد نهایی ما به شکل زیر در میاد:
      public class AjaxRequest : ActionFilterAttribute
      {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
              if (filterContext.HttpContext.Request.IsAjaxRequest()) return;
      
              filterContext.Result = new ContentResult();
          }
      }
      

      حال ما میتونیم این Filter رو بروی اکشنمون قرار بدیم. به شکل زیر:
      public class HomeController : Controller
      {
          [AjaxRequest]
          public ActionResult Test()
          {
                 return Content("Hello World");
          }
      }
      

      حالا ، اگه درخواستی بصورت مستقیم از طریق مرورگر برای Test ارسال بشه ، صرفا صفحه ای خالی دیده میشه . ولی اگه درخواست بصورت Ajaxیی صورت بگیره متن Hello World برای کلاینت ارسال میشه .

      با آرزوی موفقیت...
      برچسب ها
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      • استاد بسیاااار بسیااااااار عالی بود.. منتظر مقالات بعدی شما هستیم ;)
      • :)) قربونت عزیز دل ... ما منتظر مقالات شما هستیم ;)

      برای ارسال نظر ابتدا به سایت وارد شوید

      arrow