כיצד לעבוד עם ActionResults ב- Web API

ASP.Net Web API היא מסגרת קלה המשמשת לבניית שירותי HTTP חסרי מדינה ו RESTful. באפשרותך לנצל את תוצאות הפעולות ב- API API להחזרת נתונים משיטות הבקר של ה- API API.

מתחילים

בואו ניצור תחילה פרויקט Web API. לשם כך, צור פרויקט ריק ASP.Net ב- Visual Studio 2015 וסמן את תיבת הסימון Web API בעת בחירת תבנית הפרויקט. לאחר מכן שמור את הפרויקט עם שם.

היית שם לב שנוצר פרויקט ריק ASP.Net. לחץ באמצעות לחצן העכבר הימני על תיקיית הפיתרון של בקרים ולחץ על הוסף -> בקר כדי ליצור בקר אינטרנט API חדש. בחר בבקר "Web API 2 בקר - ריק" כאשר תתבקש לעשות זאת בחלון שצץ הבא. שמור את הבקר עם שם. נניח ששמו של הבקר לדוגמא זו הוא "DefaultController".

בואו ניצור מחלקת ישויות בשם Contact.

public class Contact

    {

        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

לאחר מכן, הוסף את השיטה הבאה ל- DefaultController.

public CustomActionResult Get()

        {

            Contact contact = new Contact();

            contact.Id = 1;

            contact.FirstName = "Joydip";

            contact.LastName = "Kanjilal";

            return new CustomActionResult(HttpStatusCode.OK, contact);

        }

שימו לב לשימוש במחלקה CustomActionResult בזמן החזרת נתונים משיטת הבקר. עכשיו בואו ניצור מחלקה CustomActionResult רק כדי להבטיח שהקוד שלכם יתאסף - אנו ניישם את המחלקה הזו בהמשך.

public class CustomActionResult : IHttpActionResult

    {

        public Task ExecuteAsync(CancellationToken cancellationToken)

        {

            throw new NotImplementedException();

        }

    }

עבודה עם ActionResults

בקר ה- Web API שלך יכול להחזיר כל אחד מסוגי הערכים הבאים:

  • HttpResponseMessage: במקרה זה ה- API של ה- Web שלך ימיר את ערך ההחזרה לאובייקט הודעת תגובה Http ויחזיר אותו.
  • IHttpActionResult: במקרה זה זמן הריצה של Web API ממיר את ערך ההחזרה לאובייקט הודעת תגובה Http (מופע HttpResponseMessage נוצר באופן אסינכרוני) באופן פנימי ומחזיר אותו. השימוש בממשק IHttpActionResult (שהוצג ב- Web API 2) מפשט את בדיקות היחידות של בקרי ה- Web API שלך וגם עוטף יצירה של אובייקט HttpResponseMessage.
  • בטל: במקרה זה, ה- API של האינטרנט שלך יחזיר תגובת Http ריקה עם קוד סטטוס 204.
  • סוגים אחרים: במקרה זה, ה- API של האינטרנט שלך ינצל את מתכונת המדיה המתאימה בכדי לסדר ולהחזיר נתונים משיטת בקר ה- API של ה- Web עם קוד מצב תגובה של 200.

קטע הקוד הבא מראה כיצד ניתן להשתמש ב- HttpResponseMessage להחזיר משיטת בקר ה- API של ה- Web.

 [Route("contact")]

public HttpResponseMessage Get()

{

    HttpResponseMessage message = Request.CreateResponse(HttpStatusCode.OK, contact);

    return message;

}

בואו וניישם כעת תוצאת פעולה מותאמת אישית בה נשתמש להחזרת נתונים מממשק ה- API שיצרנו.

יצירת ActionResult מותאם אישית

כדי ליצור מחלקת תוצאת פעולה מותאמת אישית, כל שעליך לעשות הוא ליצור מחלקה המיישמת את ממשק IActionResult ועוקפת את שיטת ExecuteAsync.

קטע הקוד הבא מראה כיצד ניתן להשתמש ב- Generics כדי ליצור מחלקת תוצאות תוצאות מותאמות אישית.

public class CustomActionResult : IHttpActionResult

    {

        private System.Net.HttpStatusCode statusCode;

        T data;

        public CustomActionResult(System.Net.HttpStatusCode statusCode, T data)

        {

            this.statusCode = statusCode;

            this.data = data;

        }

    }

קטע הקוד הבא מראה כיצד ניתן ליצור את אובייקט התגובה, לאכלס אותו בנתונים הדרושים ולהחזירו.

public HttpResponseMessage CreateResponse(System.Net.HttpStatusCode statusCode, T data)

        {

            HttpRequestMessage request = new HttpRequestMessage();            request.Properties.Add(System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

            HttpResponseMessage response = request.CreateResponse(statusCode, data);

            return response;

        }

שיטת ExecuteAsync קוראת לשיטת CreateResponse ומעבירה אליה את קוד הסטטוס והנתונים כפרמטר.

        public Task ExecuteAsync(CancellationToken cancellationToken)

        {

            return Task.FromResult(CreateResponse(this.statusCode, this.data));

        }

צורכת את ה- API של האינטרנט

כדי לצרוך את ה- API של האינטרנט שיצרת זה עתה, אתה יכול ליצור יישום קונסולה ואז לייבא את החבילה "WebApiContrib.Formatting.ProtoBuf" לפרויקט שלך באמצעות NuGet.

בהנחה שיצרת את הלקוח לצרוך את ה- API של האינטרנט שהטמענו קודם, הנה רישום הקוד שמראה כיצד תוכל לצרוך את ה- API של Web.

static void Main(string[] args)

        {

            var client = new HttpClient { BaseAddress = new Uri("//localhost:37019/") };

            HttpResponseMessage response = client.GetAsync("api/Default").Result;

            if (response.IsSuccessStatusCode)

            {

                Contact contact = response.Content.ReadAsAsync().Result;

                Console.WriteLine("Id = "+ contact.Id + " First Name: " + contact.FirstName + " Last Name: " + contact.LastName);

            }

            else

            {

                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);

            }

            Console.ReadKey();

        }