استفاده از HttpResponseMessage در WebAPI

در این مقاله شما نحوه استفاده HttpResponseMessage را در WebAPI آموزش خواهید دید. برای درک بهتر ما بصورت گام به گام با یک مثال ساده آن را شرح میدهیم.

استفاده از HttpResponseMessage در WebAPI

گام اول

یک جدول در database خود ایجاد کرده و مقادیر زیر را وارد کنید.
در اینجا ما سعی میکنیم با record ها در collection خود با استفاده از HttpResponseMessage کار کنیم. Query زیر برای ایجاد جدول است.

CREATE TABLE [dbo].[Employee](  
[ID] [bigint] IDENTITY(1,1) NOT NULL,  
[Name] [nvarchar](max) NULL,  
[Designation] [nvarchar](200) NULL,  
[Location] [nvarchar](200) NULL,  
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED  
(  
   [ID] ASC  
))  

 
پس از اجرای  Query فوق جدولی مشابه جدول زیر خواهید داشت.

گام دوم

Query زیر برای اضافه کردن داده های اولیه است در ادامه ما این داده ها را استفاده خواهیم کرد.

USE [CSharpCorner]  
GO  
SET IDENTITY_INSERT [dbo].[Employee] ON  
GO  
INSERT [dbo].[Employee] ([ID], [Name], [Designation], [Location]) VALUES (1, N'رضا رضایی', N'برنامه نویسان', N'تهران')  
GO  
INSERT [dbo].[Employee] ([ID], [Name], [Designation], [Location]) VALUES (3, N'احمد احمدی', N'برنامه نویسان', N'شیراز')  
GO  
INSERT [dbo].[Employee] ([ID], [Name], [Designation], [Location]) VALUES (4, N'اکبر اکبری', N'برنامه نویسان', N'اصفهان')  
GO  
SET IDENTITY_INSERT [dbo].[Employee] OFF  
GO  

اکنون کار ما با طراحی و ساخت پایگاه داده به پایان رسید. پس یک پروژه ASP.NET WebAPI ایجاد میکنیم. برای ساخت یک پروژه جدید مراحل را دنبال کنید.

گام سوم

یک پروژه جدید ASP.NET Web Application ایجاد و نام آن را HttpResponse قرار دهید.

گام چهارم

اکنون Empty WebAPI را انتخاب کنید.

در نهایت خواهید دید که پروژه شما با معماری WebAPI ایجاد شده است.

گام پنجم

برای ادغام Entity Connection به پروژه خود ADO.NET EntityDataModel را اتخاب نمایید.

در نهایت Entity شما این چنین خواهد بود.

گام ششم

اکنون به یک Controller نیازمند هستیم. برای این کار در پوشه Controller خود یک Web API 2 Controller-Empty ایجاد کرده و آن را به پروژه خود اضافه کنید.

یک نام برای Controller خود انتخاب کنید ما در اینجا نام Demo را قرار داده ایم.

اکنون Controller شما ساخته شده است.

ابتدا داده های جدول employee را از DB با استفاده از id آن بازیابی میکنیم. اکنون ما به موجودیت HttpResponseDBEntities دسترسی داریم.

قبل از اینکه مثال خود را ارائه کنیم باید درباره WebAPI بیشتر بدانیم. ASP.NET Web API یک framework است باعث ساخت HTTP services آسان برای طیف گسترده ای از مشتریان، مرورگرها و تلفن های همراه میشود.

public Employee GetEmployeeById(long id)  
{  
   return csharp.Employees.Where(a => a.ID == id).FirstOrDefault();  
}  

کد در صورتی که هیچ رکوردی با ID مورد نظر یافت نشود مقدار null را به کاربر برمیگرداند.
در اینجا میتوان برای رهایی از این مشکل و نمایش خطا "کارمند مورد نظر یافت نشد" با استفاده از HttpResponseMessage این کار را انجام میدهیم.

HttpResponseMessage با استفاده از پروتکل HTTP کار میکند تا اطلاعات را status/error نمایید. وقتی ما در مورد پاسخ پیام ها در Web API صحبت میکنیم صرفا هدف ارائه برخی از method ها را در Web API مد نظر داریم. در این میان میتوانید از HttpResponseMessage برای بازگشت داده ها یا برخی از پیام های کاربر پسند استفاده کنید.

ساختار HttpResponseMessage

public HttpResponseMessage ActionName(parameter(s))  
{  
   return //status with data (or) status (or) data  
} 

پیاده سازی HttpResponseMessage

Employee emp = db.Employee.Where(a => a.ID == id).FirstOrDefault();
                if (emp != null)
                {
                    return Request.CreateResponse<Employee>(HttpStatusCode.OK, emp);
                }
                else
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "کارمند مورد نظر یافت نشد!");
                }

همانطور که مشاهده میکنید ما یک HttpResponseMessage را به عنوان نوع بازگشتی برای متد GetEmployeeById استفاده کردیم که CreateResponse است و داده های کارمندان را با HttpStatusCode.OK برمیگرداند و اگر Id برای کارمند وجود نداشته باشد یک خطا ایجاد و خطای " کارمندی با این مشخصات وجود ندارد" را برمیگرداند.
برای پردازش حالت های استثنا آن را در Try / catch قرار داده ایم.

private HttpResponseDBEntities db = new HttpResponseDBEntities();
        public HttpResponseMessage GetEmployeeById(long id)
        {
            try
            {
                Employee emp = db.Employee.Where(a => a.ID == id).FirstOrDefault();
                if (emp != null)
                {
                    return Request.CreateResponse<Employee>(HttpStatusCode.OK, emp);
                }
                else
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "کارمند مورد نظر یافت نشد!");
                }
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
            }
        }

فایل های ضمیمه