آموزش web-api در asp.net وب فرم

sareh94

تازه وارد
29/6/20
1
0
1
Web Api چیست؟ قسمت دوم
پیاده سازی یک Web Api ساده با Asp.Net Web Forms
می خواهیم اولین Web Api خود را در محیط Asp.net Web Forms پیاده سازی کنیم، خواهیم دید که Visual Studio بسیاری از کارها را برای ما راحت کرده است و با چند خط کد نا قابل اولین و کوچکترین Web API خود را خواهیم ساخت و آن را کمی گسترش خواهیم داد تا بخش ها و مفاهیم بیشتری را پوشش دهیم.
برای این کار ما از Visual Studio 2015 استفاده می کنیم.
Visual Studio را اجرا کنید. و از منوی File ، سپس منوی New ، منوی Project را انتخاب نمایید تا بتوانیم یک پروژه جدید ایجاد کنیم. یک صفحه برای ما باز خواهد شد. بمانند شکل زیر، ابتدا منوی Installed را از سمت چپ انتخاب نمایید و سپس زیر منوی Templates و سپس زیر منوی Visual C# و سپس زیر منوی Web را انتخاب نمایید. از میان موارد لیست شده در باکس وسط، گزینه Asp.Net Web Application(.Net FrameWork) را انتخاب نمایید. نام پروژه را طبق سلیقه خود در بخش مربوطه وارد کرده و پوشه ای را که می خواهید پروژه در آن پوشه ایجاد و ذخیره گردد را نیز در بخش مربوطه وارد نمایید.

CreateAsp.NetWebApplication

ما اسم پروژه خود را GettingStartedWebApi قرار داده ایم.
حال باید مدل و کنترلر خود را ایجاد کنیم، منظور از مدل همان مدل داده ای ماست و کلاسی است که برای ایجاد شیء مورد نظر خود ایجاد می کنیم، برای این کار یک کلاس ایجاد کرده و نام آن را Product قرار می دهیم، یعنی مدل داده ای ما یک Product با مشخصه های اصلی مانند کد، نام ، قیمت و ... است. کلاس مورد نظر به شکل زیر خواهد بود:


namespace GettingStartedWebApi
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}
}

حال باید یک کنترل کننده Web Api به پروژه خود اضافه کنیم. شاید بتوان گفت این کلاس وظیفه اجرای درخواست های رسیده شده را به عهده دارد. در اصل یک Controller شیء ایست که وظیفه رسیدگی به درخواست های HTTP رسیده شده به Web Api را به عهده دارد.
برای اضافه کردن یک Controller به پروژه خود چنین عمل می کنیم :
روی اسم پروژه کلیک راست کرده و سپس منوی ADD و سپس منوی New Item را کلیک می کنیم تا پنجره لیست های قابل افزودن به پروژه ظاهر شود. از منوی سمت چپ، منوی Installed و سپس منوی Visual C# و سپس منوی وب را انتخاب می کنیم، و سپس از میان موارد لیست شده Web Api Controller Class را انتخاب می کنیم و اسم آن را نیز ProductsController.cs قرار می دهیم تا کلاس مورد نظر به پروژه اضافه شود.

Web Api Controller

کد داخل کلاس را به شکل زیر تغییر میدهیم:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;

namespace GettingStartedWebApi
{
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M },
new Product { Id = 4, Name = "Potato", Category = "Groceries", Price = 11 },
new Product { Id = 5, Name = "Carrot", Category = "Groceries", Price = 12 },
};

public IEnumerable<Product> GetAllProducts()
{
return products;
}

public Product GetProductById(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product;
}

public IEnumerable<Product> GetProductsByCategory(string category)
{
return products.Where(
(p) => string.Equals(p.Category, category,
StringComparison.OrdinalIgnoreCase));
}
}
}

حال باید کد های مربوط به مسیر یابی را ایجاد کنیم تا درخواست های رسیده شده به سمت این کنترلر هدایت شوند. برای این کار باید یک قطعه کدی را به فایل Global.asax اضافه کنیم ، لطفا فایل حاوی کد مربوطه به نام Global.asax.cs را باز کنید و کد زیر را به متد Application_Start آن اضافه کنید:

RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);

کد زیر را نیز فراموش نکنیم که به ابتدای فایل اضافه کنید:
using System.Web.Http;

حال باید یک صفحه وب ایجاد کنیم تا بتوانیم از طریق Ajax متد های داخل Controller را فراخوانی کنیم، یعنی در اصل Web Api ایجاد شده را اجرا کنیم.
از طریق منوی مربوطه صفحه default.aspx را ایجاد می کنیم.
اما قبل از اینکه متد خود را از طریق jQuery فراخوانی کنیم، می خواهیم اطمینان حاصل کنیم که کد ما درست کار می کند، بنابراین با یک ابزار دیگری باید Web API خود را فراخوانی کنیم. همانطور که می دانید می توانیم با استفاده از مرورگرهای داخل کامپیوتر خود این کار را انجام دهیم. کافیست که پروژه خود را اجرا کنیم تا Web APIما توسط IIS Express تعبیه شده داخل VS میزبانی شود. بعد از اینکه پروژه اجرا شد، صفحه مرورگر پیش فرض ما باز می شود. حال آدرس /api/products را به انتهای آدرس اصلی که در مرورگر قرار دارد اضافه می کنیم و با مرور گر فراخوانی می کنیم. اگر همه چیز درست باشد نتیجه حاصله چنین خواهد بود:

API Products

همانطور که می بینید نتیجه به صورت XML در مرورگر به نمایش در آمده است، بنا براین نتیجه می گیریم که Web API نوشته شده به صورت صحیح کار می کند.
حال می توانیم از طریق Package Manager ، جی کوئری را دانلود کنیم تا بتوانیم از کتابخانه آن برای کاری که در پیش داریم استفاده کنیم، اما حتما نیاز نیست این کار را انجام دهیم، کافی است لینک آنلاین آن را به عنوان Reference در صفحه خود قرار دهیم که در ادامه خواهیم دید. کد داخل صفحه default.aspx چنین خواهد بود.

<asp:Content ID="BodyContent" ContentPlaceHolderID="BodyContentPlaceHolder" runat="server">
<script src=" " type="text/javascript"></script>
<h2>Products</h2>
<table style="border: 1px solid #000000;">
<thead>
<tr>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody id="products">
</tbody>
</table>
<script type="text/javascript">
function getProducts() {
$.getJSON("/api/products",
function (data) {
$('#products').empty(); // Clear the table body.
// Loop through the list of products.
$.each(data, function (key, val) {
// Add a table row for the product.
var row = '<td>' + val.Name + '</td><td>' + val.Price + '</td>';
$('<tr/>', { html: row }) // Append the name.
.appendTo($('#products'));
});
});
}
$(document).ready(function () {
// we call the function
getProducts();