a

ABLY مقالات و مطالب مجموعه

آموزش ASP.NET MVC & web API (بخش سوم-متوسطه)

آموزش ASP.NET MVC & web API (بخش سوم-متوسطه)

بسم الله الرحمن الرحیم

  این دوره آموزشی دارای پیش نیاز می باشد، برای مطالعه پیش نیاز این دوره لطفا مقاله "آموزش WebApi" مطالعه کنید.

 

 مشاهده تمامی آموزش های دوره آموزش Web API

 

آموزش  Web API– سطح متوسط

     بخش سوم– ساخت یک (Web API  (REST

 

آموزش (Web API  (REST

 

آموزش ساخت Read/Write Web API

 

بخش اول آموزش Web API

بخش دوم آموزش Web API

بخش سوم آموزش Web API

 

در این بخش شما متدهایPOST  و PUT را فرا خواهید گرفت و آنها را به همراه ویژگی ویرایش اطلاعات به برنامه خود اضافه خواهیم کرد.

پروژه Web API مراحل قبل را باز کنید. فایل Services/ContactRepository.cs را باز کنید.
 Adding Data-Persistence Features to the Contact Repository Implementation

در این مرحله به پیاده سازی Contact Repository خود ویژگی نگهداری اطلاعات و یا Data-Persistence اضافه خواهیم کرد.
کلاس ContactRepository را به پروژه Web API مرحله قبل اضافه خواهیم کرد. این کار باعث خواهد شد داده ها ارسالی دریافت و یک شی جدید ایجاد شود.

به کلاس ContactRepository یک constant به صورت زیر برای نمایش کلید یا نام cache وب سرور اضافه کنید. این ثابت برای بخش های بعدی مورد نیاز است.

 

private const string CacheKey = "ContactStore";

 

تابع سازنده زیر را برای کلاس ContactRepository ایجاد کنید.

 

public ContactRepository()
{
    var ctx = HttpContext.Current;

    if (ctx != null)
    {
        if (ctx.Cache[CacheKey] == null)
        {
            var contacts = new Contact[]
            {
                new Contact
                {
                    Id = 1, Name = "Glenn Block"
                },
                new Contact
                {
                    Id = 2, Name = "Dan Roth"
                }
            };

            ctx.Cache[CacheKey] = contacts;
        }
    }
}

 

کد متد GetAllContacts را به صورت زیر تغییر دهید.

 

 

 

 

 

 

 

 

 

بسم الله الرحمن الرحیم

  این دوره آموزشی دارای پیش نیاز می باشد، برای مطالعه پیش نیاز این دوره لطفا مقاله "آموزش WebApi" مطالعه کنید.

 

 مشاهده تمامی آموزش های دوره آموزش Web API

 

آموزش  Web API– سطح متوسط

     بخش سوم– ساخت یک (Web API  (REST

 

آموزش (Web API  (REST

 

آموزش ساخت Read/Write Web API

 

بخش اول آموزش Web API

بخش دوم آموزش Web API

بخش سوم آموزش Web API

 

در این بخش شما متدهایPOST  و PUT را فرا خواهید گرفت و آنها را به همراه ویژگی ویرایش اطلاعات به برنامه خود اضافه خواهیم کرد.

پروژه Web API مراحل قبل را باز کنید. فایل Services/ContactRepository.cs را باز کنید.
 Adding Data-Persistence Features to the Contact Repository Implementation

در این مرحله به پیاده سازی Contact Repository خود ویژگی نگهداری اطلاعات و یا Data-Persistence اضافه خواهیم کرد.
کلاس ContactRepository را به پروژه Web API مرحله قبل اضافه خواهیم کرد. این کار باعث خواهد شد داده ها ارسالی دریافت و یک شی جدید ایجاد شود.

به کلاس ContactRepository یک constant به صورت زیر برای نمایش کلید یا نام cache وب سرور اضافه کنید. این ثابت برای بخش های بعدی مورد نیاز است.

 

private const string CacheKey = "ContactStore";

 

تابع سازنده زیر را برای کلاس ContactRepository ایجاد کنید.

 

public ContactRepository()
{
    var ctx = HttpContext.Current;

    if (ctx != null)
    {
        if (ctx.Cache[CacheKey] == null)
        {
            var contacts = new Contact[]
            {
                new Contact
                {
                    Id = 1, Name = "Glenn Block"
                },
                new Contact
                {
                    Id = 2, Name = "Dan Roth"
                }
            };

            ctx.Cache[CacheKey] = contacts;
        }
    }
}

 

کد متد GetAllContacts را به صورت زیر تغییر دهید.

 

 

public Contact[] GetAllContacts()
{
    var ctx = HttpContext.Current;

    if (ctx != null)
    {
        return (Contact[])ctx.Cache[CacheKey];
    }

    return new Contact[]
        {
            new Contact
            {
                Id = 0,
                Name = "Placeholder"
            }
        };
}

 

 

توجه داشته باشید که این یک مثال عمومی برای معرفی است و ما به جای استفاده از یک مکانیزم ذخیره سازی بر اساس Session یا Request storage lifetime از web server's cache  به عنوان یک وسیله ذخیره سازی استفاده خواهیم کرد، بنابراین مقادیر می توانند توسط چندین client به صورت همزمان قابل دست یابی باشند.

در کلاس ContactRepository یک متد جدید با نام SaveContact اضافه کنید تا با استفاده از این متد اطلاعات ارسالی را ذخیره کنیم. متد SaveContact یک پارامتر با نام Contact دارد و یک مقدار Boolean بر می گرداند (return) که این مقدار مشخص می کنید عملیات ثبت موفقیت آمیز بوده یا خیر.

 

public bool SaveContact(Contact contact)
  {
        var ctx = HttpContext.Current;

        if (ctx != null)
        {
             try
             {
                  var currentData = ((Contact[])ctx.Cache[CacheKey]).ToList();
                  currentData.Add(contact);
                  ctx.Cache[CacheKey] = currentData.ToArray();

                  return true;
             }
             catch (Exception ex)
             {
                  Console.WriteLine(ex.ToString());
                  return false;
             }
        }

        return false;
  }

 

 

فراخوانی Web API از طریق یک HTML Client

 

در پوشه Views/Home فایل Index.cshtml را باز کنید.
کد زیر را در DIV ای که ID آن body است قرار دهید تا کد شما شبیه کد زیر شود.

 

<div id="body">
    <ul id="contacts"></ul>
</div>

 

کد زیر را در پایین فایل Index.cshtml قرار دهید. این یک کد درخواست HTTP به Web API ارسال می کند.

 

@section scripts{
<script type="text/javascript">
$(function()
{
        $.getJSON('/api/contact', function(contactsJsonPayload)
        {
            $(contactsJsonPayload).each(function(i, item)
            {
                $('#contacts').append('<li>' + item.Name + '</li>');
            });
        });
});
</script>
}

 

فایل ContactController.cs را باز کنید. یک breakpoint بر روی متد Get در کلاس ContactController قرار دهید.

 

آموزش Web API

 

F5 را فشار دهید تا برنامه اجرا شود. مطمئن شوید در صفحه اصلی وب سایت هستید.

وقتی پروژه لود شود کد JavaScript اجرا می شود و برنامه در قسمتی که breakpoint قرار دادیم متوقف می شود.

 

آموزش Web API

 

Breakpoint را حذف کنید و F5 را فشار دهید تا برنامه ادامه پیدا کند. وقتی که فراخوانی تابع Web API کامل شود شما باید لیست تماس ها را بتوانید مشاهده کنید.

 

آموزش Web API

 

برنامه را متوقف کنید.

 


تغییر UI صفحه Index View برای ایجاد امکان ثبت تماس

در این بخش می خواهیم یک HTML page جدید برای دریافت اطلاعات تماس از کاربر اضافه کنیم و همچنین این اطلاعات را از طریق Web API به متد مربوطه ارسال کنیم.

فایل ContactController.cs را باز کنید و یک متد جدید با نام Post مانند کد زیر به این کلاس اضافه کنید.

 

public HttpResponseMessage Post(Contact contact)
{
     this.contactRepository.SaveContact(contact);

     var response = Request.CreateResponse<Contact>(System.Net.HttpStatusCode.Created, contact);

     return response;
}

فایل Index.cshtml را باز کنید و کد زیر را به انتهای لیستی که در مرحله قبل ایجاد کردیم اضافه کنید.

 

<form id="saveContactForm" method="post">
<h3>Create a new Contact</h3>
<p>
    <label for="contactId">Contact Id:</label>
    <input type="text" name="Id" />
</p>
<p>
    <label for="contactName">Contact Name:</label>
    <input type="text" name="Name" />
</p>
<input type="button" id="saveContact" value="Save" />
</form>

درون بخش script که در پایین صفحه قرار دارد، کد زیر را برای مدیریت رویداد کلیک button قرار دهید. این کد داده ها را به  Web API ما از طریق فراخوانی HTTP POST ارسال خواهد کرد.

 

<script type="text/javascript">
... 
$('#saveContact').click(function()
         {
              $.post("api/contact",
                    $("#saveContactForm").serialize(),
                    function(value)
                    {
                         $('#contacts').append('<li>' + value.Name + '</li>');
                    },
                    "json"
              );
         });
</script>

 

در کلاس ContactController.cs بر روی متد Post یک breakpoint قرار دهید.
حال کلید F5 را فشار دهید تا برنامه اجرا شود.

 

در صفحه برنامه خود یک شماره تماس و id ثبت کنید و بر روی باتن Save کلیک کنید.

 

آموزش Web API

 

وقتی که برنامه بر روی متد Post متوقف شد، به پرارپرتی های پارامتر contact نگاه کنید. مقادیر این پراپرتی ها باید با مقادیری که شما در صفحه HTML وارد کردید مشابه باشد.

 

آموزش Web API

 

برنامه را Step By Step اجرا کنید تا به خطی برسید که متغییر response ایجاد می شود. در این مرحله به پنجره Locals در debugger نگاه کنید، شما می توانید ببنید که تمامی پراپرتی ها مقداردهی شده اند.

 

آموزش Web API

 

F5 را بزنید تا اجرای برنامه کامل شود، اگر به صفحه مرورگر خود دقت کنید مشاهده خواهید کرد که یک رکورد جدید به اطلاعات شما اضافه شده است  و ترتیب مرتب سازی این عناصر بر اساس کدی است که در پیاده سازی ContactRepository نوشتیم.
 

 

آموزش Web API

 

این بخش دوره آموزشی Web API در اینجا به پایان می رسد در دوره آموزشی بعدی Web API یک پروژه تقریبا کاملتر را باز قدم به قدم جهت معرفی سایر مباحث این WEB API بررسی می کنیم.

برای تست یک پروزه بر روی یک سرور می توانید از ویندوز آژور استفاده کنید. آموزش آپلود کردن یک وب سایت را بر روی وبندوز آژور قبلا نوشته ایم، که می توانید از این بخش آن را مطالعه کنید. ( پیشنهاد می کنم حتما این مطلب را مطالعه کنید).

 

برای مشاهده آموزش بعدی WEB API از طریق این لینک اقدام نمایید.

 مشاهده تمامی آموزش های دوره آموزش Web API

نظرات

  • Hannah Martinez
    nabi
    دو شنبه 11 دی 1278 0:00

    ممنون.

    این هم ارور که میده.
    http://s3.picofile.com/file/8192592034/Untitled.png

    • Judith Bell
      پاسخ
      حسینبهزادی
      دو شنبه 11 دی 1278 0:00

      با عرض سلام

      به نظر می رسد آدرس درخواستی یا وجود ندارد یعنی درواقع Controller و یا Action ایی که به دنبال آن هستید وجود ندارد و یا آن نام اشتباه است و یا پارامتر مورد نظرش فراهم نشده است!

  • Hannah Martinez
    nabi
    دو شنبه 11 دی 1278 0:00

    سلام.

    ممنون از آموزش های بسیار خوبتون.
    من کد های شما رو دقیقا مثل نمونه انجام میدم.
    اما وقتی می خوام با استفاده از respository از contact  get رو انجام بدم با ارور زیر مواجه میشم.
    ممنون میشم راهنمایی کنید
    500 Internal Server Error - http://localhost:322350/api/Contact

    • Judith Bell
      پاسخ
      حسینبهزادی
      دو شنبه 11 دی 1278 0:00

      با عرض سلام
      خطای 500 به معنای این است که مشکلی در وب سایت شما رخ داده است بهتر است برای نمایش و اطلاعات کامل خط Custome Error را در فایل webconfig اضافه کنید و یا در صورت وجود داشتن این خط مقدار mode آن را Off بگذارید

      <configuration>
      <system.web>
      <customErrors mode="Off"/>
      </system.web>
      </configuration>
      موفق باشید

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :Phone Number
0713 625 1757 :Phone Number