در معماری MVC کلاس های کنترل گر وظیفه دریافت درخواست از کاربر یا کلاینت را دارند. پس از دریافت درخواست، بر نشانی با یک مسیر تطابق داده می شود و سپس درخواست به یک متد از کلاس کنترل فرستاده خواهد شد. معمولا درخواست ها از یک نشانی و با متد GET یا از طریق فرم های اچ تی ام ال و با متد POST فرستاده شوند.

بنابراین برای استفاده درست از متدهای درخواست HTTP می بایست که آنها را برای متدهای کنترل گر به کار ببریم. برای نمونه اگر متد کنترل گری بخواهد داده های فرستاده شده از یک فرم را دریافت و پردازش کند، پس درخواست به شیوه POST خواهد بود، پس باید متد را به گونه ای آماده کنیم که درخواست های POST برای آن معتبر باشد. در برابر این اگر درخواست از نشانی به متد کنترل گر فرستاده شود، پس متد کنترل گر باید درخواست های GET را پشتیبانی کنند.

ویژگی های [HttpGet] و [HttpPost] در ASP.NET Core MVC

ویژگی های [HttpGet] و [HttpPost] به ترتیب برای پشتیبانی از متدهای GET و POST در پروژه های ASP.NET Core MVC هستند. این دو ویژگی درخواست فرستاده شده به سرور را به گونه دوتایی Key-Value تبدیل می کنند. زمانی که بخواهیم متد کنترل گر درخواست GET را پردازش کند، در بالای نام آن باید ویژگی [HttpGet] نوشته شود و اگر بخواهیم متد کنترل گر درخواست POST را پردازش کند، پس باید بالای نام آن ویژگی [HttpPost] را قرار دهیم.

فرض کنید شما می خواهید فرمی برای ثبت نام را نشان دهید، پس نیاز به یک متد کنترل گر برای پاسخ دهی به درخواست GET است تا از طریق نشانی URL برگه وب که فرم در آن است نشان داده شود. همچنین نیاز به متد کنترل گری برای پاسخ دهی به درخواست POST است تا داده های فرستاده شده از فرم را پردازش کند. 

در هر دو کد متدی به نام ()EmployeeForm داریم که یکی با ویژگی [HttpGet] و دیگری با [HttpPost] است که هر دو منعلق به کلاس کنترل گری به نام EmployeeController هستند. توجه کنید این دو متد یک پیاده سازی Override هستند. در مفاهیم شی گرایی می توان درون یک کلاس متدهای همنام داشت ولی باید فهرست پارامترهای آنها متفاوت باشد. در اینجا نخستین متد ()EmployeeForm بدون پارامتر ولی پومی دارای یک ورودی از نمونه کلاس Employee است.

بنابراین با داشتن این دو متد همنام یک مسیر به گونه Employee/EmployeeForm و به نشانی https://127.0.0.1:5001:employee/employeeform داریم که هر زمان درخواست از این نشانی فرستاده شود، پس درخواست GET است و از این رو متدی فراخوانی می شود که بالای آن ویژگی [HttpGet] نوشته شده باشد و سپس فایل نمایی توسط متد ()View برگشت داده می شود که فرم اچ تی ام ال در آن نوشته شده است.

اکنون که فرم نمایش داده شده است، پس داده ها از طریق فرم به متد کنترل گری فرستاده می شوند که بالا آن ویژگی [HttpPost] نوشته شده است. داده های فرستاده شده به متد درون یک کوئری Entity Framework آماده می شوند تا به از طریق یک مدل به پایگاه داده فرستاده شوند و سپس پاسخ آماده شده که یا یک خطا به دلیل نبود داده ها یا عدم اتصال به پایگاه داده است یا اینکه داده های دلخواه از جدول ها است باید توسط متد ()View به یک فایل نما فرستاده شود.

اگر هیچ ویژگی بالای نام متد کنترل گر نوشته نشود، پیش فرض متد GET یا ویژگی [HttpGet] خواهد بود. همچنین در کنار این دو ویژگی، ویژگی های دیگر نیز مانند [HttpPut] و [HttpDelete] نیز پشتیبانی می شوند. همچنین ویژگی دیگری به نام [AcceptVerb] است و زمامی که شما بخواهید بیشتر از یک متد HTTP را برای یک متد کنترل گر تعیین کنید، می توانید به نمونه زیر از آن برای دو متد POST و PUT کمک بگیرید.