Action Result در Web API

در این مقاله قصد داریم درباره Action Result توضیحاتی دهیم و اینکه چگونه یک پیام پاسخ HTTP در قسمت Response بر می گرداند. و خاصیت های آن برای ساختن پیام های سفارشی بررسی خواهیم کرد .

Action Result در Web API

در این مقاله قصد داریم درباره Action Result  توضیحاتی دهیم و اینکه چگونه یک پیام پاسخ  HTTP  در قسمت  Response  بر می گرداند.

چهار عمل تنیجه به وسیله  Web API 2  پشتیبانی می شوند که عبارتند از :

. HttpResponseMessage

. IHttpActionResult

. Void

. Type of Entity  نوع موجودیتی که معنای انواع دیگر است .

 

IHttpActionResult در Web API  2  معرفی شد.

بر اساس تعریف MSDN ، HttpResponseMessage نشان دهنده پیام پاسخ  HTTP (HTTP Response Message ) است .  

اگر نوعی که از متد اکشن برگردانده می شود یکی از نتیجه های اکشن  Web API  باشد ،  API مقدار نتیجه را به پیام پاسخ HTTP  تبدیل می کند. این  action result  با استفاده از خواص آن ،انعطاف پذیری بیشتری برای ساختن پیام های سفارشی به ما می دهد .

 HttpResponseMessage دارای خاصیت های زیر می باشد که می تواند برای نوشتن پیام های سفارشی مفید باشد .

 

Content

    [HttpGet]  
    public HttpResponseMessage GetStudent(int id)  
    {  
       HttpResponseMessage response = new HttpResponseMessage();  
       response.Content = new StringContent("This is HttpResponse's Content");  
       return response;  
    }  

اگر کد قبلی را اجرا کنیم میبینیم که محتوای  " این یک پیام سفارشی می باشد." به بدنه پاسخ اضافه شده است.

به طور مشابه می توانیم StatusCode  و یک ورژن از  HttpResponseMessage تنظیم کنیم. و IsSuccessStatusCode هنگامی که StatusCode   معتبر باشد یا نه ، یک مقدار بولین بر میگرداند.

 برای نشان دادن اینکه HttpResponseMessage چگونه کارمیکند یک Entity   با نام student ایجاد میکنیم .

    public class Student  
    {  
       public int Id { get; set; }  
       public string FirstName { get; set; }  
       public string LastName { get; set; }  
       public string Location { get; set; }  
    }  

سپس یک کنترلر StudentController با خاصیت Web API ایجاد میکنیم  .

    public class StudentController : ApiController  
    {  
        List<Student> lstStudents = new List<Student>(){  
        new Student(){Id=001,FirstName="Srinivas", LastName="Vadepally", Location="Hyderabad"},  
        new Student(){Id=002,FirstName="Manoj", LastName="Kodepaka", Location="Banglore"},  
        new Student(){Id=003,FirstName="Harish", LastName="Donthula", Location="Mumbai"},  
        };  
      
        [HttpGet]  
        public IEnumerable<Student> GetStudents()  
        {  
            return lstStudents;  
        }  
      
        [HttpGet]  
        public HttpResponseMessage GetStudent(int id)  
        {  
            HttpResponseMessage response = new HttpResponseMessage();  
            response.Content = new StringContent("This is HttpResponse's Content");  
            return response;  
        }  
          
    }  

پس از اجرای API  میتوانیم در بدنه Response متن پیام را مشاهده کنیم .

می توانیم با استفاده از Firebug  یا RestClient  به بدنه response دسترسی پیدا کنیم.

نوعی که متد GetStudent(int id) بر می گرداند از HttpResponseMessage  می باشد. همانطور که خاصیت Content  را به پاسخ اضافه کردیم ، بدنه Response محتوای آن را نشان داد.

نکته مهم دیگر این است که می توانیم از Entity  با استفاده از HttpResponseMessage گذر کنیم. Web API  همانطور که گفته شد Entity  را به  HttpResponseMessage تبدیل می کند

    [HttpGet]  
    public HttpResponseMessage GetStudent(int id)  
    {  
       //HttpResponseMessage response = new HttpResponseMessage();  
       //response.Content = new StringContent("This is HttpResponse's Content");  
       HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, lstStudents.FirstOrDefault(s => s.Id == id));  
       return response;  
    }  

با توجه به کد قبلی Student Entity  به صورت  HttpResponseMessage برگردانده خواهد شد .

 

Void

همانطور که همه می دانیم، Void  چیزی برنمی گرداند. اما با استفاده از آن در Web API  نتیجه اکشن ، کد وضعیت 204 است که بدون محتوا می باشد .

    [HttpGet]  
    public void GetStudent(int id)  
    {  
       //HttpResponseMessage response = new HttpResponseMessage();  
       //response.Content = new StringContent("This is HttpResponse's Content");  
       //HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, //lstStudents.FirstOrDefault(s => s.Id == id));  
       //return response;  
    }  

 

IHttpActionResult

IHttpActionResult در Web API 2  معرفی شد. که آن هم یک HttpResponseMessage   بر می گرداند. با استفاده از آن کدی که قبلا نوشته بودیم به صورت زیر کاهش می یابد.

    [HttpGet]  
    public IHttpActionResult GetStudent(int id)  
    {  
       return Ok();  
    }  

کد نوشته شده یک پیام HTTP  برای کد وضعیت با عنوان 200 ok بر می گرداند.

همانطور که در تعریف IHttpActionResult گفته شده ، مانند یک کارخانه برای HttpResponseMessage   همراه با پاسخ های ساخته شده مانند OK , BadRequest,NotFound,Unauthorized,Exception,Conflict و Redirect می باشد.

IHttpActionResult شامل یک متد و ExecuteAsync می باشد .

متد async و ExecuteAsync  توسط Web API برای ایجاد یک HttpResponseMessage  و تبدیل نتیجه HTTP Response  صدا زده می شوند .  اگر از HttpResponseMessage  یا IHttpActionResult استفاده کنیم در پایان فقط یک پیام پاسخ HTTP خواهیم داشت. مزیت IHttpActionResult  آن است که پاسخ های ساخته شده را خواهیم داشت .

 اگر از  Entity  به عنوان یک  Action Result  استفاده کنیم ، نتیجه از نوع Student Entity  خواهد بود .

پاسخ تولید شده از طریق Serialization  در  Entity  است .

در متد قبل ، پاسخ اکشن از نوع  Student Entity  خواهد بود. پاسخ متد هم بصورت  Student Entity   برگردانده می شود . به این معنا که شی Student  با استفاده ازSerialized در بدنه پاسخ برگردانده می شود.

 

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