ایجاد ActionResult سفارشی با استفاده از Web API

چهارشنبه 6 آبان 1394

در این مقاله، میخواهیم در مورد چگونگی ایجاد action result های سفارشی در ASP.NET Web API صحبت کنیم. فرض کنید در متدی می‌خواهید نوعی را برگردانید که برای آن، ActionResult موجود نباشه مثلا RSS و یا فایل از نوع Excel و...که این مسئله با ActionResult های سفارشی حل می شود.

ایجاد ActionResult سفارشی با استفاده از Web API

ابزار مورد نیاز :

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 دسترسی پیدا کنیم. مانند زیر:

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

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید