ایجاد ActionResult سفارشی با استفاده از Web API
چهارشنبه 6 آبان 1394در این مقاله، میخواهیم در مورد چگونگی ایجاد action result های سفارشی در ASP.NET Web API صحبت کنیم. فرض کنید در متدی میخواهید نوعی را برگردانید که برای آن، ActionResult موجود نباشه مثلا RSS و یا فایل از نوع Excel و...که این مسئله با ActionResult های سفارشی حل می شود.
ابزار مورد نیاز :
Visual Studio 2012
ASP.NET WEB API 2 Project نصب شده روی نرم افزار VS
ایجاد Action Result های سفارشی:
اولین نسخه ASP.NET Web API ، سه نوع action result را پشتیبانی می کرد که شامل HttpResponseMessage، Void و نوع Entity یا Model می باشد( برخی از نوع های دیگر به عنوان هر ASP.NET/WEB-API از Microsoft است). اما در API 2، مایکروسافت یک Action result دیگر را معرفی کرد که IhttpActionResult نامیده می شود.
این رابط(interface) به عنوان یک کارخانه برای HttpResponseMessage عمل می کند. اگر ما از IhttpActionResult به عنوان نوع بازگشتی متد Web API استفاده کنیم، به صورت داخلی مقدار را به Http Response Message تبدیل کرده ایم.
بهترین استفاده از IhttpActionResult این است که برخی ساختارهای پیغام را روی پیام پاسخ فراهم کند، مانند Ok, NotFound ، BadRequest، Found،UnAuthorized و غیره...
IhttpActionResult برخی ساختارهای پیغام را روی Http پیام پاسخ فراهم می کند، ما می توانیم Action Result خود را با پیاده سازی متد IhttpActionResult's ExecuteAsync ایجاد کنیم.
مرحله اول: یک فولدر با نام CustomActionResult ایجاد کنید:
مرحله دوم: یک کلاس با نام MyCustomResultForOK ایجاد کنید که از IhttpActionResult ارث بری می کند.
مرحله سوم:
namespace Web_API_ActionResult.CustomActionResult { public class MyCustomResultForOk : IHttpActionResult { public Student Student { get; set; } public MyCustomResultForOk(Student student) { Student = student; } public HttpResponseMessage MyCoustomeResponseMessage(Student student) { HttpRequestMessage request = new HttpRequestMessage(); request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration()); HttpResponseMessage response = request.CreateResponse<Student>(HttpStatusCode.OK,student); return response; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { throw new NotImplementedException(); } } }
ویژگیها:
می توانیم یک action result سفارشی با نام MyCustomActionResultOk ایجاد کنیم.
یک سازنده پارامتردهی شده به منظور فرستادن شی Student از WEB API متد می باشد.
متد ExcecuteAsync پیاده سازی شده است.
مرحله 4: action method ایجاد شده GetStudent (Student Student) نام گرفته است تا شی Student را به عنوان HTTP Response Message با Action Result سفارشی، برگرداند. به صورت زیر:
namespace Web_API_ActionResult.Controllers { 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 MyCustomResultForOk GetStudent(int id) { Student student = lstStudents.FirstOrDefault(s => s.Id.Equals(id)); return new MyCustomResultForOk(student); } } }
مرحله 5: اگر برنامه را اجرا کنیم می بینیم شی Student را با فرمت XML برمی گرداند، مانند زیر:
همچنین با استفاده از نرم افزار Rest client می توانیم به بدنه response دسترسی پیدا کنیم. مانند زیر:
- ASP.net MVC
- 2k بازدید
- 2 تشکر