در این پست از وبسایت پرووید در رابطه با استفاده کردن از استفاده کردن از متد PUT در ASP.NET Web API صحبت خواهیم کرد.

در قسمت های قبلی از این آموزش در رابطه با استفاده کردن از Action Method های Get و Post که در پروژه Web API ایجاد شده بودند صحبت کردیم. این موضوع از درون یک پروژه ASP.NET MVC انجام شد. می توانید این قسمت ها ار از مطلب آموزش ASP.NET Web API مطالعه کنید. ضمناً در رابطه با ASP.NET MVC می توانید از بسته ی آموزش ویدئویی ASP.NET MVC و Entity Framework در قالب پروژه استفاده کنید.

حال در این قسمت در این آموزش قصد داریم در رابطه با نحوه استفاده کردن از متد Put برای به روز رسانی و یا همان Update کردن یک رکورد از قبل موجود در دیتابیس صحبت کنیم.

بسته ی آموزش ویدئویی ساخت Web API در ASP.NET Core 2.0

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی ساخت Web API در ASP.NET Core 2.0 دیدن کنید.

همانطور که در قسمت های قبلی دیدید ما در Web API یک متد Put برای هندل کردن HTTP Put request ها شبیه به کد زیر ایجاد کردیم.

public class StudentController : ApiController
{
    public StudentController()
    {
    }

    public IHttpActionResult Put(StudentViewModel student)
    {
        if (!ModelState.IsValid)
            return BadRequest("Not a valid data");

        using (var ctx = new SchoolDBEntities())
        {
            var existingStudent = ctx.Students.Where(s => s.StudentID == student.Id).FirstOrDefault<Student>();

            if (existingStudent != null)
            {
                existingStudent.FirstName = student.FirstName;
                existingStudent.LastName = student.LastName;

                ctx.SaveChanges();
            }
            else
            {
                return NotFound();
            }
        }
        return Ok();
    }
}

علاوه بر این در قسمت های قبل توانستیم که با استفاده از یک View لیستی از اطلاعات Student ها را نشان بدهیم. در کنار هر رکورد و یا هر سطر یک لینک برای ویرایش کردن اطلاعات آن دانش‌ آموز وجود دارد که در تصویر زیر آن را مشاهده می کنید.

باید بتوانیم با کلیک کردن بر روی این لینک جزئیات مربوط به هر Student را ویرایش کنیم. چیزی که در تصویر زیر مشاهده می شود ساختار پروژه ای است که در قسمت های قبل آن را ایجاد کرده ایم.

همانطور که مطلع هستید در قسمت های قبل کلاس StudentViewModel را در درون فولدر Models ایجاد کردیم. کد مربوط به StudentViewModel در قسمت زیر قابل مشاهده است.

public class StudentViewModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
        
    public AddressViewModel Address { get; set; }

    public StandardViewModel Standard { get; set; }
}

حال بیایید به طور قدم به قدم اقدام به پیاده سازی عملیات Put کنیم.

قدم اول

همانطور که در قسمت بالا گفتیم باید بتوانیم با کلیک کردن بر روی لینک Edit اطلاعات مربوط به یک Student را از دیتابیس خوانده و اقدام به ویرایش کردن آن کنید. کلیک کردن بر روی این لینک باعث ارسال شدن یک HTTP Get request به آدرس http://localhost:64189/student/edit/{id} می شود که مربوط به یک Controller در ASP.NET MVC است.

بنابراین ما باید یک Action Method با نام Edit و از نوع HttpGet در StudentController ایجاد کنیم تا با استفاده از آن بتوانیم جزئیات مربوط به آن Student مورد نظر را در View رندر کنیم. این موضوع در کد زیر نشان داده شده است.

public class StudentController : Controller
{
    public ActionResult Index()
    {
        //consume Web API Get method here.. 

        return View();
    }

    public ActionResult Edit(int id)
    {
        StudentViewModel student = null;

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:64189/api/");
            //HTTP GET
            var responseTask = client.GetAsync("student?id=" + id.ToString());
            responseTask.Wait();

            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync&lt;StudentViewModel&gt;();
                readTask.Wait();

                student = readTask.Result;
            }
        }

        return View(student);
    }
}

همانطور که در کد بالا مشاهده می کنید این Action Method که Edit نام دارد دارای یک پارامتر به نام id می باشد. این پارامتر توسط یک Query String به آدرس مورد نظر ارسال می‌شود که حاوی id دانش آموزی است که اطلاعات آن باید از دیتابیس خوانده شده و سپس مورد ویرایش قرار بگیرند. این موضوع نیز توسط یک Object از کلاس HttpClient انجام شده است.

قدم دوم

به منظور اضافه کردن View ی مورد نظر بر روی متد Edit راست کلیک کرده و گزینه Add View را انتخاب کنید. این موضوع باعث نشان داده شدن پنجره Add View شبیه به تصویر زیر می‌شود.

در این پنجره برای Template از گزینه Edit و برای Model class از گزینه StudentViewModel استفاده کنید. پس از آن بر روی دکمه Add کلیک کرده تا فایل Edit.cshtml در فولدر Student که زیر فولدری از فولدر Views می باشد ساخته شود. کد مربوط به فایل Edit.cshtml را در قسمت زیر مشاهده می کنید.

@model WebApiDemo.Models.StudentViewModel
@{
    ViewBag.Title = "Edit Student - MVC";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Edit Student</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()       

<div class="form-horizontal">
       

<hr />

            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            @Html.HiddenFor(model => model.Id)      

<div class="form-group">
            @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })            

<div class="col-md-10">
                @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
            </div>

        </div>

       

<div class="form-group">
            @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })            

<div class="col-md-10">
                @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
            </div>

        </div>


<div class="form-group">
           

<div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>

        </div>

    </div>

}


<div>
    @Html.ActionLink("Back to List", "Index")
</div>

در این فایل دستور Html.BeginForm باعث ایجاد شدن یک تگ form در HTML می شود که با استفاده از آن یک HTTP Post request در زمان کلیک شدن دکمه Save به سرور ارسال می شود. حال می توانید اقدام به اجرا کردن برنامه کنید و لیست دانش آموزان را شبیه به تصویر زیر ببینید.

لطفاً دقت کنید که با قرار دادن موس بر روی لینک Edit آدرس مربوط به ارسال request در قسمت پایین و سمت چپ نشان داده میشود.

با کلیک کردن بر روی این لینک می توانید View زیر از برنامه را ببینید.

در ادامه باید اقدام به پیاده سازی یک Action Method با نام Edit که از نوع HttpPost کنید. این Action Method زمانی فراخوانده می شود که بر روی دکمه Save کلیک کنید.

قدم سوم

یک Action Method از نوع HttpPost به StudentController اضافه کنید که وظیفه اش هندل کردن HTTP Post request ها می باشد. این موضوع به منظور بروزرسانی کردن اطلاعات یک دانش ‌آموز است. کد مربوط به این Action Method را در قسمت زیر مشاهده می کنید.

public class StudentController : Controller
{
    public ActionResult Edit(int id)
    {
        StudentViewModel student = null;

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:64189/api/");
            //HTTP GET
            var responseTask = client.GetAsync("student?id=" + id.ToString());
            responseTask.Wait();

            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync&lt;StudentViewModel&gt;();
                readTask.Wait();

                student = readTask.Result;
            }
        }
        return View(student);
    }

    [HttpPost]
    public ActionResult Edit(StudentViewModel student)
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:64189/api/student");

            //HTTP POST
            var putTask = client.PutAsJsonAsync&lt;StudentViewModel&gt;("student", student);
            putTask.Wait();

            var result = putTask.Result;
            if (result.IsSuccessStatusCode)
            {

                return RedirectToAction("Index");
            }
        }
        return View(student);
    }
}

همانطور که در قسمت بالا مشاهده می کنید این Action Method که Edit نام دارد از نوع HttpPost می باشد و از HttpClient به منظور ارسال کردن یک HTTP Post request به Web API استفاده می‌کند. این موضوع باعث بروز رسانی شدن اطلاعات مربوط به Student انتخاب شده می شود. پس تا به اینجای کار ما توانستیم سه Action Method از نوع های Get و Post و Put را در ASP.NET MVC برای هندل کردن request های مختلف پیاده سازی کنیم. در رابطه با ASP.NET MVC می توانید از بسته ی آموزش ویدئویی ASP.NET MVC و Entity Framework در قالب پروژه استفاده کنید.

در قسمت بعدی از این آموزش اقدام به پیاده سازی کد مربوط به متد Delete در پروژه خواهیم کرد که برای حذف کردن یک رکورد از دیتابیس مورد استفاده قرار خواهد گرفت.

بسته ی آموزش ویدئویی پیاده سازی Web API های Async در ASP.NET Core

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی پیاده سازی Web API های Async در ASP.NET Core دیدن کنید.

امیدواریم که این آموزش از وبسایت پرووید نیز مورد توجه تمامی دوستان عزیز قرار گرفته باشد. از شما دعوت می‌کنیم که از دیگر آموزش های ما در رابطه با Web API استفاده کنید. لیست کامل این آموزش ها را می توانید در پست مربوط به آموزش ASP.NET Web API مشاهده کنید.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *