خرید بک لینک
نقل قول نوشته شده توسط My_LoVe_IRAN مشاهده تاپیک

خب خوده mvc به صورت پیش فرض از get استفاده میکنه ! میخام بدونم دلیلی داره واسه این کار ؟ چون پیشنهاد شده از فرم های آماده mvc استفاده بشه ! اما خب این فرم ها دارن از get استفاده میکنن !!!
خب سوالم همینه ،چطور این راه رو ببندیم ؟ اصلا تو mvc که از EF استفاده میکنه لازمه جلوی این کار رو گرفت ؟ تا چه حد ؟

در MVC ما 2 اکشن Delete داریم ، یکی بصورت GET که اطلاعات رکوردی که قصد حذفش رو دارید رو نمایش میده و اکشن دوم که یک Attribute به اسم ActionName داره که POST هستش ( اطلاعات تکمیلی برای ActionName ) ، به این صورت :

// GET: Administrator/News/Delete/5
public async Task<ActionResult> Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
News news = await _db.News.FindAsync(id);
if (news == null)
{
return HttpNotFound();
}
return View(news);
}

// POST: Administrator/News/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(int id)
{
News news = await _db.News.FindAsync(id);
if (news != null) _db.News.Remove(news);
await _db.SaveChangesAsync();
return RedirectToAction("Index");
}

فرمی که POST هست از ValidateAntiForgeryToken استفاده میکنه و از حملات XSS جلوگیری میکنه .
در مرحله بعدی ، کاربر نهایتا کاری که میتونه با ID انجام بده ، دیدن اطلاعات یک رکورد هست که این هم بستگی به Authorization که شما برای اکشن هاتون قرار دادید داره .
شما وقتی اکشن Delete رو براش Authorize قرار میدید ، فقط به کاربر مورد نظر ( مدیر ) امکان حذف میدید و کاربران دیگه از این ID هیچ استفاده دیگه نمیتونن بکنن .

برچسب: نویسنده: محمد رضا جوادیان تاريخ: سه شنبه 23 خرداد 1396 ساعت: 6:33

صفحه بندی