ایجاد CRUD در asp.net core 2.0

ایجاد CRUD در asp.net core 2.0

آموزش برنامه نویسی | ایجاد CRUD در asp.net core 2.0

چگونه CRUD Web API را در asp.net core 2 استفاده کنیم؟

 

crud in asp.net core 2

آموزش برنامه نویسی | ایجاد CRUD در asp.net core 2.0

چگونه CRUD Web API را در asp.net core 2 استفاده کنیم؟

  • یک پروژه خالی باز کنید، کلاس Startup را برای اضافه کردن services و middleware به mvc آپدیت کنید.


public void ConfigureServices(  
       IServiceCollection services)  
   {  
       services.AddSingleton();  
       services.AddMvc();  
   }  
  
   public void Configure(  
       IApplicationBuilder app,   
       IHostingEnvironment env)  
   {  
       app.UseExceptionHandler(configure =>  
       {  
           configure.Run(async context =>  
           {  
               var ex = context.Features  
                               .Get()  
                               .Error;  
  
               context.Response.StatusCode = 500;  
               await context.Response.WriteAsync($"{ex.Message}");  
           });  
       });  
  
       app.UseMvcWithDefaultRoute();  
   } 


  • Service و domain model را اضافه کنید


public class Movie  
 {  
     public int Id { get; set; }  
     public string Title { get; set; }  
     public int ReleaseYear { get; set; }  
     public string Summary { get; set; }  
 }      
  
 public interface IMovieService  
 {  
     List GetMovies();  
     Movie GetMovie(int id);  
     void AddMovie(Movie item);  
     void UpdateMovie(Movie item);  
     void DeleteMovie(int id);  
     bool MovieExists(int id);  
 } 
  • مدل های input و output را برای ارسال و دریافت داده ها از طریق Api اضافه کنید

public class MovieInputModel  
 {  
     public int Id { get; set; }  
     public string Title { get; set; }  
     public int ReleaseYear { get; set; }  
     public string Summary { get; set; }  
 }  
  
 public class MovieOutputModel  
 {  
     public int Id { get; set; }  
     public string Title { get; set; }  
     public int ReleaseYear { get; set; }  
     public string Summary { get; set; }  
     public DateTime LastReadAt { get; set; }  
 } 



  • یک کنترلر برای Api اضافه کنید

[Route("movies")]  
 public class MoviesController : Controller  
 {  
     [HttpGet]  
     public IActionResult Get()  
     {  
         var model = service.GetMovies();  
  
         var outputModel = ToOutputModel(model);  
         return Ok(outputModel);  
     }  
  
     [HttpGet("{id}", Name = "GetMovie")]  
     public IActionResult Get(int id)  
     {  
         var model = service.GetMovie(id);  
         if (model == null)  
             return NotFound();  
  
         var outputModel = ToOutputModel(model);  
         return Ok(outputModel);  
     }  
  
     [HttpPost]  
     public IActionResult Create([FromBody]MovieInputModel inputModel)  
     {  
         if (inputModel == null)  
             return BadRequest();  
  
         var model = ToDomainModel(inputModel);  
         service.AddMovie(model);  
  
         var outputModel = ToOutputModel(model);  
         return CreatedAtRoute("GetMovie",   
                    new { id = outputModel.Id }, outputModel);  
     }  
  
     [HttpPut("{id}")]  
     public IActionResult Update(int id, [FromBody]MovieInputModel inputModel)  
     {  
         if (inputModel == null || id != inputModel.Id)  
             return BadRequest();  
  
         if (!service.MovieExists(id))  
             return NotFound();  
  
         var model = ToDomainModel(inputModel);  
         service.UpdateMovie(model);  
  
         return NoContent();  
     }  
  
     [HttpDelete("{id}")]  
     public IActionResult Delete(int id)  
     {  
         if (!service.MovieExists(id))  
             return NotFound();  
  
         service.DeleteMovie(id);  
  
         return NoContent();  
     }  
 }  

ASP.NET Core یک مکانیزم متحد برای ایجاد برنامه MVC و Web API می دهد. تفاوت اصلی این است که به منظور برقراری ارتباط با مشتری، web api فایل های json یا xml و یا http را به جای views باز می گرداند.

Model

مدل های زیادی در mvc وجود دارد. نکته کلیدی که در هنگام توسعه وب API به خاطر میآید این است که مدلهایی که توسط کنترلر دریافت و ارسال میشوند، اشیاء انتقال داده (DTO) هستند و از مدلهای دامنه یا نهاد متمایز هستند.

Retrieve (GET)

  • یک get موفق، کد 200 به معنی ok را باز می گرداند.
  • در صورت پیدا نشدن، خطای 404 را باز می گرداند.

Create (POST)

  • یک post موفق کد 201 را به معنی ایجاد باز می گرداند و در قسمت هدر http به url جدید اشاره می کند.
  • در صورت "درخواست بد" کد 400 و در صورت "پیدا نشدن" کد 404 را باز می گرداند.

Update (PUT)

  • در صورتی که put و بروز رسانی موفق باشد کد 204 را باز می گرداند.
  • در صورت "درخواست بد" کد 400 و در صورت "پیدا نشدن" کد 404 را باز می گرداند.

Update (PATCH)

هر چند که از این مورد کم استفاده می شود اما می توانیم از آن هم بعنوان بروزرسانی کردن بکار ببریم. برای اینکار باید از application/json-patch+json استفاده کنیم.



[HttpPatch("{id}")]  
    public IActionResult UpdatePatch(  
        int id, [FromBody]JsonPatchDocument patch)  
    {  
        if (patch == null)  
            return BadRequest();  
  
        var model = service.GetMovie(id);  
        if (model == null)  
            return NotFound();  
  
        var inputModel = ToInputModel(model);  
        patch.ApplyTo(inputModel);  
  
        TryValidateModel(inputModel);  
        if (!ModelState.IsValid)  
            return new UnprocessableObjectResult(ModelState);  
  
        model = ToDomainModel(inputModel);  
        service.UpdateMovie(model);  
  
        return NoContent();  
    } 

در اینجا ما 1) یک مدل از داده های منبع برگرداندیم 2) آن را به input model تبدیل کردیم 3) patch را اعمال کردیم 4) اعتبارسنجی و در آخر آپدیت داده ها.

Delete (DELETE)

  • اگر حذف شما موفق باشد کد 204 باز گردانده می شود.
  • در صورت پیدا نشدن کد 404 را باز می گرداند.

Validation (POST/PUT/PATCH)

مدل های ورودی را می توان با استفاده از حاشیه نویسی داده یا کد سفارشی، مورد بررسی قرار داد. کد وضعیت 422 (Entity Unprocessable) را می توان برای نشان دادن شکست اعتبار سنجی به مشتری بازگرداند. برای این کار هیچ اکشنی ساخته نشده است اما بهتر است که آن را ایجاد کنید.



public class UnprocessableObjectResult : ObjectResult  
 {  
     public UnprocessableObjectResult(object value)   
         : base(value)  
     {  
         StatusCode = StatusCodes.Status422UnprocessableEntity;  
     }  
  
     public UnprocessableObjectResult(ModelStateDictionary modelState)   
         : this(new SerializableError(modelState))  
     { }  
 } 

 

حال شما می توانید با POST/PUT/PATCH اعتبارسنجی را چک کنید.



if (!ModelState.IsValid)  
             return new UnprocessableObjectResult(ModelState); 

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


if (!ModelState.IsValid)  
            return Unprocessable(ModelState);  
  
public class BaseController : Controller  
{  
    [NonAction]  
    public UnprocessableObjectResult Unprocessable(  
       ModelStateDictionary modelState)  
    {  
        return new UnprocessableObjectResult(modelState);  
    }  
  
    [NonAction]  
    public ObjectResult Unprocessable(object value)  
    {  
        return new UnprocessableObjectResult(value);  
    }  
}  

منبع: sharpcorner

"منتشر شده در سایت ably"

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

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس