Action Result در Web API
سه شنبه 7 مهر 1394در این مقاله قصد داریم درباره Action Result توضیحاتی دهیم و اینکه چگونه یک پیام پاسخ HTTP در قسمت Response بر می گرداند. و خاصیت های آن برای ساختن پیام های سفارشی بررسی خواهیم کرد .
در این مقاله قصد داریم درباره 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 در بدنه پاسخ برگردانده می شود.
- ASP.net
- 1k بازدید
- 0 تشکر