20
وان عن مقاله :وع کار با شرMVC 6 Web API وEntity Framework 7 ویسان مرجع تخصصی برنامه ن وتنظیم کننده :یه تهwww.barnamenevisan.org [email protected] و جدید اصلی هایژگی از ویکی یASP.Net 5 کردن متحدprogramming model and combining MVC, Web API, and Web Pages آنها در یکمهار دادن ه و قرframework به نامMVC 6 ت .در نسخه قبلی اسASP.Net هایژگین وی در بی اشتراکیMVC وWeb API زی برای هما پیاده ساجود داشت ، ا و ر دو کتابخانه کام ، با آمدنت بود متفاوASP.Net MVC 5 هایی توسعه برنامها براه ، آن رهای کتابخانین تفاوتم بین ادغا اweb لت بخشید و سهوreusability برد بای آن را کدها. ین مقاله ، در ا هدف ما این است که نگاهی برAsp.Net MVC 5 MVC 6 Web API داشته با شیم، باستفاده ا ازMVC 6 Web API وEntity Framework یکAPI لی خی ساده خواهیم ساخت. ین همچن در این مقاله خواهیم آموخت: ستفاده ا ازASP.Net empty Template برای ساختنweb API نگاهیجمالی ا بر ساختار یک پروژه جدید درVS 2015 و چگونگیستفاده ا ا زdependency management tool کربندی پیASP.Net Pipline برایضافه ا کردن عناصری که برایWeb API ما نیاز است. قاله شما به ادامه این م برایvisual studio 2015 ارید . نیاز د

Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

,programming model and combining MVCمتحد کردن ASP.Net 5یکی از ویژگی های اصلی و جدید

Web API, and Web Pages و قرار دادن همه آنها در یک framework به نام MVC 6 است .در نسخه قبلی

ASP.Net اشتراکی در بین ویژگیهای MVC و Web API ر دو کتابخانه کامال وجود داشت ، اما پیاده سازی برای ه

web ادغام بین این تفاوتهای کتابخانه ، آن را برای توسعه برنامه های ASP.Net MVC 5 متفاوت بود ، با آمدن

. کدهای آن را باال برد reusability سهولت بخشید و

با ، شیمبا داشته Asp.Net MVC 5 – MVC 6 Web API بر نگاهی که است این ما هدف در این مقاله ،

از استفاده

MVC 6 Web API و Entity Framework یک API مقاله این در همچنین. ساخت خواهیم ساده خیلی

: آموخت خواهیم

web API ساختن برای ASP.Net empty Template از استفاده •

dependency management زا استفاده چگونگی و VS 2015 در جدید پروژه یک ساختار بر اجمالی نگاهی •

tool

. است نیاز ما Web API برای که عناصری کردن اضافه برای ASP.Net Pipline پیکربندی •

نیاز دارید . visual studio 2015برای ادامه این مقاله شما به

Page 2: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

ت یکرا باز کرده و همانطور که در عکس زیر نشان داده شده اس Visual Studio 2015مرحله اول :

ASP.Net web Application . انتخاب کنید

انتخاب میکنیم . ASP.NET 5 Emptyحال ، در پنجره ای که باز شده است ،

Page 3: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

مرحله دوم : اضافه کردن وابستگی های مورد نیاز

که دارد وجود Project.jsonزمانی که پروژه ساخته می شود شما باید توجه داشته باشید که در اینجا فایلی به نام

. دیگر های کتابخانه در ها وابستگی مدیریت برای قسمتی با همراه باشد می شما پروژه تنظیمات تمام حاوی

را کار این که ، میکنیم مدیریت را هاdependecy و هاnuget package manager ،package از استفاده با ما

اضافه میکنیم . . project.json فایل به را ها وابستگی تمام مورد این در ام اما. دهید انجام ها ابزار افزایش با میتوانید

همانند عکس زیر :

، پس ، میکنیم اضافه را است الزم Web APIبنابراین ما تمام وابستگی هایی که برای پیکربندی

: میکنیم بجا جا زیر های کد با را dependencies قسمت کدهای و میکنیم باز را project.json فایل

Page 4: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

ependencies": {

"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",

"EntityFramework": "7.0.0-beta1",

"EntityFramework.SqlServer": "7.0.0-beta1",

"EntityFramework.Commands": "7.0.0-beta1",

"Microsoft.AspNet.Mvc": "6.0.0-beta1",

"Microsoft.AspNet.Diagnostics": "1.0.0-beta1",

"Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta1"

}

: کاربرد وابستگی هایی که ما اضافه کرده ایم به شکل زیر است

• Microsoft.AspNet.Server.IIS ما قصد میزبانی از :Web API توسط را IIS این بنابراین ، داریم

package اضافه به نیازی دیگر باشد دیگری روش به میزبانی که صورت این به شما ریزی برنامه اگر. است نیاز

. نیست ، این کردن

• EntityFramework & EntityFramework.SqlServer : ر نگهدارنده داده ها دweb API ماsql

server خواهد بود .

entity framwork 7 می تواند برای کار با نگهدارنده داده دیگری پیکربندی شود و حتما هم نباید پایگاه داده

,SqlServer, SQLite : پشتیبانی میشوند عبارت اند از E7 توسط باشد ، نگهدارنده های داده ای که

AzureTableStorage, and InMemory

• EntityFramework.Commands : اینpackage به دلیل در دسترس قرار دادن دستور مهاجر پایگاه داده

. مورد استفاده قرار میگیرد KVMبوسیله web APIبرای پروژه

• Microsoft.AspNet.Mvc این اصلی ترین :packageای است

. میکند اضافه را Web API و MVCکه تمام عناصر مورد نیاز برای اجرای

Page 5: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

• Microsoft.AspNet.Diagnostics : اساسا از این برای نمایش یک صفحه خوش آمد گویی زیبا وقتی که

درخواست در مرورگر فرستاده میشود ، استفاده میشود . شما اگر میخواهید میتوانید جلوی این را بگیرید ، اما این

مورد استفاده قرار میگرفت ، نشان می دهد 2که در 403جای نمایش صفحه یک صفحه خوش آمدگویی زیبا را به

.

• Microsoft.Framework.ConfigurationModel این :package فایل خواندن و بارگذاری مسئولیت

به نام پیکربندی

config.json این فایل مسئول تنظیم را بر عهده دارد . که این فایل را در مرحله های بعدی اضافه خواهیم کرد .

“IConfiguration” object است .

کد قطعه در که commands اضافه شود قسمتی است به نام project.jsonآخرین چیزی که نیاز است که به فایل

. است آمده زیر

"commands": {

"ef": "EntityFramework.Commands"

Page 6: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

}

را EFاضافه میکنیم که به اجازه نوشتن دستورات EntityFramework.Commands برای را "ef"ما پسوند

. میدهد

Config.jsonمرحله سوم : اضافه کردن فایل پیکربندی

اضافه کنید و نام آن را asp.net configuration file جدید از نوع itemحال روی پروژه کلیک راست کرده و یک

config.json شما میتوانید این فایل را میراث فایلبگذارید ، web.config نظر بگیرید ، فعال این فایل فقط شامل

. پایگاه داده است

"Data": {

"DefaultConnection": {

"Connectionstring": "Data Source=.\\sqlexpress;Initial

Catalog=RegistrationDB;Integrated Security=True;"

}

}

}

connection string در ما که است دلیل همین به ، است Json فایل یک این توجه داشته باشید که

ه می کنیم . استفاد escape character از

web APIبرای ASP.Net 5 pipelineمرحله چهارم : پیکربندی

ما ، مسئول است ، در حال حاضر با Piplineدن عناضر مورد نیاز این کالس برای اضافه کر

ASP.net 5 empty کالس به را کدهایی ما ابتدا. دهد نمی انجام را کاری واقعا ما پروژه و است خالی ما کالس

Startup کالس. دهیم می توضیح را آن خط ب خط سپس کرد خواهیم اضافه Startup.cs ی را باز کرده و کدها

قرار دهید . زیر را در آن

using System;

Page 7: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

using Microsoft.AspNet.Builder;

using Microsoft.AspNet.Http;

using Microsoft.AspNet.Hosting;

using Microsoft.Framework.ConfigurationModel;

using Microsoft.Framework.DependencyInjection;

using Registration_MVC6WebApi.Models;

namespace Registration_MVC6WebApi

{

public class Startup

{

public static IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env)

{

// Setup configuration sources.

Configuration = new

Configuration().AddJsonFile("config.json").AddEnvironmentVariables();

}

public void ConfigureServices(IServiceCollection services)

{

// Add EF services to the services container.

services.AddEntityFramework().AddSqlServer().AddDbContext<RegistrationDbContext

>();

services.AddMvc();

Page 8: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

//Resolve dependency injection

services.AddScoped<IRegistrationRepo, RegistrationRepo>();

services.AddScoped<RegistrationDbContext, RegistrationDbContext>();

}

public void Configure(IApplicationBuilder app)

{

// For more information on how to configure your application, visit

http://go.microsoft.com/fwlink/?LinkID=398940

app.UseMvc();

app.UseWelcomePage();

}

}

}

چیزی که ما در باال پیاده سازی کردیم به شرح زیر است :

constructor در این کالس مسئول خواندن تنظیمات از فایل پیکربندیconfig.json را آن تر پیش که باشد می

این شامل configuration ایستا object پس. داریم را connection string فقط ما حاضر حال در کردیم تعریف

. کرد خواهیم استفاده آن از رو پیش مراحل در که میشود ماتتنظی

کار به شروع پروژه که زمانی ، پذیرد می IServicesCollection نوع از پارامتری ConfigurationServises متد

، خب ، است ما Pipline در عناصر ثبت مسئول اساسی متد این ، میشود فراخوانی خودکار بصورت متد این کند می

: کرد خواهیم ثبت ما که عناصری

توای پایگاه داده با نام مح برای data provider عنوان به SQL Server از استفاده با را Entity Framework ما -

RegistrationDBContext . به پروژه اضافه میکنیم

Page 9: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

کنیم استفاده Web API و MVC از میتوانیم ما ، سپس ، کنیم می اضافه خود Pipline به را MVC مولفه های -

.

است شده اضافه ASP.Net 5 به که چارچوبی از خارج و زیبا های ویژگی از یکی و آخرین -

Dependency Injection هرگونه از استفاده بدون است IoC Container ما که باشید داشته توجه ، بیرونی

فراخوانی با را IRegistrationRepo از نظر مورد نمونه چگونه

services.AddScoped<IRegistrationRepo, RegistrationRepo>)(; کردیم ایجاد .

و IRegistrationRepoاین نمونه تا زمان وجود داشتن درخواست در دسترس می باشد . ما کالس های

RegistrationRepo کرد خواهیم سازی پیاده بعدی مراحل در را .

از استفاده برای را ، متد این ، پذیرد می را IApplicationBuilder نوع از پارامتری Configure متد ، پایان در

MVC میکند پیکربندی گویی آمدخوش صفحه نمایش و .

Respository و Models , DataBase Context کردن اضافه: پنجم مرحله

این ، CourseStatusModel و course: میکنیم اضافه را است کالس دو شامل که را modelحال فایلی با نام

را Modelsپس ، برای سازماندهی بهتر کد ، فولدری را به نام ، داد خواهند نمایش را ما های داده دامنه کالسها

. میکنیم اضافه آن به را است زیر کدهای شامل که را فایلی سپس اضافه می کنیم

using System;

using System.ComponentModel.DataAnnotations;

namespace Registration_MVC6WebApi.Models

{

public class Course

{

public int Id { get; set; }

[Required]

Page 10: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

[StringLength(100, MinimumLength = 5)]

public string Name { get; set; }

public int Credits { get; set; }

}

public class CourseStatusModel

{

public int Id { get; set; }

public string Description { get; set; }

}

}

را که مسئولیت ارتباط با پایگاه داده ما را دارد را اضافه کنیم ، DataBase Context حال نیاز است که ما کالس

میگذاریم سپس کدهای زیر را به آن اضافه RegistrationDbContextخب ، کالسی را اضافه میکنیم و نام آن را

میکنیم :

using Microsoft.Data.Entity;

using System;

using Microsoft.Data.Entity.Metadata;

namespace Registration_MVC6WebApi.Models

{

public class RegistrationDbContext :DbContext

{

public DbSet<Course> Courses { get; set; }

Page 11: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

protected override void OnConfiguring(DbContextOptions options)

{

options.UseSqlServer(Startup.Configuration.Get("Data:DefaultConnection:Connection

String"));

}

}

}

اضافه میکند . بنابراین زمانی که یکبار Dbset عنوان به را ، اساسا چیزی که در اینجا پیاده سازی کردیم

courses data model را اجرا میکنیم ، جدول پایگاه داده را نمایش می دهد ، توجه داشته باشید که در اینجا یک

هایی که برای data providerیسی کنیم ، بنابراین ما میتوانیم متد جدید با نام وجود دارد که ما میتوانیم آن را بازنو

یش دهیم .نما را داریم نیاز DB Contextکار کردن با

UserSqlServer متدِ extensionبرای Constructorاستفاده میکنیم . SQL Serverدر این مورد ، ما از

، با نشان دادن کلید Config.json فایل از را آن ما ، خب ، میپذیرد Connection Stringپارامتری از نوع

Data : DefaultConnection:ConnectionString برای شیConfiguration ای که ما پیش تر آن را در

ایجاد کردیم Startupکالس

. نمی باشد Connection String تنظیم برای بهینه راهی این که باشید داشته توجه

را RegistrationRepoبدنه Interface را اضافه کنیم و در این IRegistrationRepoز داریم که درآخر ما نیا

و RegistrationRepo دوفایل با نام های Modelsپیاده سازی میکنیم ، پس در فولدر

IRegistrationRepo را اضافه میکنیم و دو تکه کد زیر را در آنها قرار میدهیم :

rationRepo CodeIRegist

using System;

using System.Collections;

using System.Collections.Generic;

Page 12: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

namespace Registration_MVC6WebApi.Models

{

public interface IRegistrationRepo

{

IEnumerable<Course> GetCourses();

Course GetCourse(int courseId);

Course AddCourse(Course course);

bool DeleteCourse(int courseId);

}

}

RegistrationRepo implementation

using System;

using System.Collections.Generic;

using System.Linq;

namespace Registration_MVC6WebApi.Models

{

public class RegistrationRepo : IRegistrationRepo

{

private readonly RegistrationDbContext _db;

public RegistrationRepo(RegistrationDbContext db)

Page 13: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

{

_db = db;

}

public Course AddCourse(Course course)

{

_db.Courses.Add(course);

if (_db.SaveChanges() > 0)

{

return course;

}

return null;

}

public bool DeleteCourse(int courseId)

{

var course = _db.Courses.FirstOrDefault(c => c.Id == courseId);

if (course != null)

{

_db.Courses.Remove(course);

return _db.SaveChanges() > 0;

}

return false;

}

Page 14: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

public Course GetCourse(int courseId)

{

return _db.Courses.FirstOrDefault(c => c.Id == courseId);

}

public IEnumerable<Course> GetCourses()

{

return _db.Courses.AsEnumerable();

}

}

}

ارسال پیاده سازی در اینجا واقعا آسان است ، چیزی که در اینجا هیچ ارزشی ندارد چگونگی

RegistrationDbContext به عنوان پارامتر به سازنده RegistrationRepo است ، پس ماConstructor

Injection کالس در را پیاده سازی میکنیم . اگر ما آن را پیش تر Startup . پیکربندی نکرده باشیم ، کار نمیکند

: KNM (K Version Manager) نصب: ششم مرحله

برای migrationsرا اضافه کردیم ،ما از domain data modelsو DataBase Contextنکه ما بعد از ای

برای NuGet Package Managerما از Asp.Netمیتوانیم استفاده کنیم ، در نسخه های قبلی database ایجاد

commandاز Kاز دستورات * ما میتواینم با استفاده ASP.Net MVC 5 در اما این نوع کارها استفاده میکردیم ،

prompt . استفاده کنیم

KVM یک اسکریپت -چیست ؟PowerShell است برای گرفتنruntime و مدیریت چند نسخه از آن در ماشین

وجود دارد در یک زمان یکسان ، استفاده میشود .

میرویم ، مراحل زیر را دنبال کنید : KVM نصب سراغ به حال

1 .command prompt را باز کنید باRun as Administrator .

Page 15: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

کنید اجرا را زیر دستور. 2

1

@powershell -NoProfile -ExecutionPolicy unrestricted -Command

object -"iex ((new

https://raw.githubusercontent.cnet.webclient).DownloadString('

'))"om/aspnet/Home/master/kvminstall.ps1

جاری سیستم ، نصب میکند. userرا برای KVM. این اسکریپت 3

وارد آن شوید . Run as Administratorخارج شوید و دوباره با command prompt از. 4

5 .KVM کنید . را با دستور زیر بروزرسانی

1 <span dir="rtl">KVM upgrade</span>

طبق مراحل زیر هستیم : EF migrationsحال ما آماده اجرای

databaseها در migrationمرحله هفتم : مقدار دهی اولیه و استفاده از

یرکتوری را را میشناسد ، اولین کاری که باید انجام دهیم آدرس دا Entity Frameworkو Kدستورات cmdحال

به آدرس دایرکتوری پروژه تغییر دهیم . همانطور که در عکس زیر مشاهده میکنید دایرکتوری پروژه شامل فایل

project.json : میباشد

دو دستور زیر را اجرا کنید : cmdخب ، ما نیاز داریم که در

<span dir="rtl">k ef migration add initial

k ef migration apply</span>

( اضافه میکند بنابراین ما فایلی <date<_>migration name>را با فرمت نام ) migrationاساسا دستور اول ، فایل

در پروژه خواهیم داشت . MIGRATIONS شاخه زیر در initial.cs _201411172303154با نام

Page 16: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

: بود خواهد زیر شکل به ما پروژه ساختار

ای که پیش تر در Connection Stringها را تایید خواهد کرد و پایگاه داده را بر اساس migration، دستور دوم

config.json ، میکند ایجاد ما برای نشان دادیم .

نشان دادیم ، می آید . project.jsonاز تنظیماتی که پیش تر در فایل "ef" دستور که باشید داشته توجه

: Courses Controller برای GET متد کردن هاضاف: هشتم مرحله

Controller کالسی است که مسئول مدیریت و اداره درخواست هایHTTP است ، درWeb API Controller ،

ASP.Net 5 ما از کالسController ارث بری خواهد کرد ، پس ، فولدری به نامController ، اضافه می کنیم

ی با نامControllerسپس

Page 17: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

CoursesController : اضافه میکنیم و کد های زیر را به آن اضافه میکنیم

using Microsoft.AspNet.Mvc;

using Registration_MVC6WebApi.Models;

using System;

using System.Collections.Generic;

namespace Registration_MVC6WebApi.Controllers

{

[Route("api/[controller]")]

public class CoursesController : Controller

{

private IRegistrationRepo _registrationRepo;

public CoursesController(IRegistrationRepo registrationRepo)

{

_registrationRepo = registrationRepo;

}

[HttpGet]

public IEnumerable<Course> GetAllCourses()

{

return _registrationRepo.GetCourses();

}

[HttpGet("{courseId:int}", Name = "GetCourseById")]

Page 18: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

public IActionResult GetCourseById(int courseId)

{

var course = _registrationRepo.GetCourse(courseId);

if (course == null)

{

return HttpNotFound();

}

return new ObjectResult(course);

}

}

}

: پیاده سازی کرده ایم به شرح زیر است Controller چیزی که در کالس

Controller صفتی است با صفتRoute به شکل )]"api/[controller]"[Route( بنابراین هر

. هدایت میشود Controller که تطابق داشته باشد به HTTP درخواست

[Controller] که در URL قرار دارد ، نام Controller در مثال ما در . در اینجا قرار میگیرد route که

Controllerی با نام Courses داریم route ماapi/Courses میشود .

میباشد که یک [HttpGet] که دارای صفت GetAllCourses آن اولین ، تعریف کردیم HTTP GETما دو متد

. ، رمزگذاری شده است ، را بازمیگرداند json که با استفاده از فرمت .Netشی

integer از نوع CourseIdمیباشد . که یک پارامتر [HttpGet] با صفت GetCoursesById دومین آنها ،

باز میگرداند که این قابلیت را به IActionResult از نوع object دریافت میکند . آخرین چیز اینکه ، این متد یک

. های متفاوتی را بازگردانیم action ما میدهد که بر اساس منطق خودمان

وجود Course را باز خواهیم گرداند یا اگر HttpNotFound وجود نداشته باشد ما Courseدر این مورد اگر

. میگردانیمداشته ما شی کدگذاری شده را باز

ارسال کردیم ، CoursesControllerرا برای سازنده IRegistrationRepo چگونه در آخر توجه داشته باشید که

. است Constructor Injection این

Page 19: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

: Courses Controllerبرای DELETEو Postمرحله نهم : اضافه کردن متدهای

جدید یا حذف courseه سازی کنیم که به ما اجازه اضافه کردن یک دیگر را پیاد HTTPحال قصد داریم دو متد

را باز کرده و کدهای زیر را در آن قرار دهید : CoursesControllerرا میدهد ، پس ، فایل courseکردن یک

HttpPost]

public IActionResult AddCourse([FromBody] Course course)

{

if (!ModelState.IsValid)

{

Context.Response.StatusCode = 400;

return new ObjectResult(new CourseStatusModel { Id = 1 , Description= "Course model is

invalid" });

}

else

{

var addedCourse = _registrationRepo.AddCourse(course);

if (addedCourse != null)

{

string url = Url.RouteUrl("GetCourseById", new { courseId = course.Id },

Request.Scheme, Request.Host.ToUriComponent());

Context.Response.StatusCode = 201;

Context.Response.Headers["Location"] = url;

Page 20: Entity Framework 7و MVC 6 Web API اب راک عورش : هلاقم ... · اب ، میشاب هتشا Asp.Net MVC 5 – MVC 6 Web API رب یهاگن هک تسا نیا ام فده

Entity Framework 7 و MVC 6 Web API شروع کار با مقاله : عنوان

تهیه وتنظیم کننده : مرجع تخصصی برنامه نویسان

www.barnamenevisan.org [email protected]

return new ObjectResult(addedCourse);

}

else

{

Context.Response.StatusCode = 400;

return new ObjectResult(new CourseStatusModel { Id = 2, Description = "Failed to save

course" });

}

}

}

: چیزی که ما پیاده سازی کرده ایم به شرح زیر است

: AddCourse برای متد

ی را که course object متد این ، جدید است را اضافه میکنیم course که مسئول ایجاد یک HTTP POST متد

. رمزگشایی میکند CLR آن را برای web API framework از بدنه درخواست آمده است را میپذیرد سپس

را باز خواهیم گردانند ، و در HTTP 400 معتبر نبود )مثال اصن وجود نداشت ( ، ما وضعیت course object اگر

. باز خواهیم گرداند POCO (courseStatusModel) بدنه ی پاسخ ما یک نمونه از کالس

. api/courses/4 : تنظیم میکنیم مثال course برای دسترسی به id با موفقیت ایجاد شده بود ، ما یک course اگر

. را در صفحه پاسخ باز میگردانیم course در آخر هم ما

: DeleteCourse برای متد

ود است را ، اضافه میکنیم .این متد یک پارامتر از نوعموج Course که مسئول حذف یک HTTP Delete متد

integer دریافت میکند . اگر course با موفقیت حذف شد ما وضعیت HTTP 204 را باز میگردانیم . (Not

Content)

. را بازمیگردانیم HTTP 404 اگر پارامتر ارسالی برای متد نامعتبر باشد ما وضعیت