כיצד להעביר מספר פרמטרים לשיטות בקר API API

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

Web API מספק את שיטות הפעולה הדרושות לפעולות HTTP GET, POST, PUT ו- DELETE. בדרך כלל תעביר אובייקט יחיד כפרמטר לשיטות הפעולה PUT ו- POST. שים לב ש- Web API אינו תומך בהעברת מספר פרמטרים של POST לשיטות בקר ה- API של Web כברירת מחדל. אבל מה אם היית מגיש בקשת POST עם אובייקטים מרובים שהועברו כפרמטרים לשיטת בקר API API?

הבנת הבעיה

Web API אינו מאפשר לך להעביר מספר עצמים מורכבים בחתימת השיטה של ​​שיטת בקר Web API - אתה יכול לפרסם רק ערך יחיד לשיטת פעולה של Web API. ערך זה בתורו יכול אפילו להיות אובייקט מורכב. ניתן להעביר מספר ערכים אם כי על פעולת POST או PUT על ידי מיפוי פרמטר אחד לתוכן בפועל ואת הנותרים באמצעות מחרוזות שאילתה.

מחלקת הבקר הבאה מכילה שיטת POST בשם Save שמקבלת מספר פרמטרים.

מחלקה ציבורית AuthorsController: ApiController

    {

        [HttpPost]

        ציבורי HttpResponseMessage שמור (מזהה int, מחרוזת שם פרטי, שם מחרוזת, כתובת מחרוזת)

        {

            // קוד רגיל

            החזר Request.CreateResponse (HttpStatusCode.OK, "הצלחה ...");

        }

   }

כעת נניח שאתה מנסה להתקשר לשיטת בקר ה- Web API מ- JQuery כמוצג להלן.

$ .ajax ({

 url: 'api / author',

 סוג: 'POST',

 נתונים: {Id: 1, FirstName: 'Joydip', LastName: 'Kanjilal', כתובת: 'Hyderabad'},

 dataType: 'json',

 הצלחה: פונקציה (נתונים) {

התראה (נתונים);

}});

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

[HttpPost]

ציבור HttpResponseMessage PostAuthor (מחבר מחבר, אימות מחרוזת אסימון)

{

  // קוד רגיל

  החזר Request.CreateResponse (HttpStatusCode.OK, "הצלחה ...");

}

באפשרותך להעביר פרמטרים לשיטות בקרת Web API באמצעות התכונות [FromBody] או [FromUri]. שים לב כי ניתן להשתמש במאפיין [FromBody] פעם אחת בלבד ברשימת הפרמטרים של שיטה. כדי לחזור על כך, מותר לך להעביר רק ערך אחד (סוג פשוט או מורכב) כפרמטר לשיטת בקר API API בעת שימוש במאפיין [FromBody]. אתה יכול להעביר מספר פרמטרים כלשהו באמצעות התכונה [FromUri] אך זה לא הפיתרון האידיאלי במקרה שלנו.

ועכשיו, הפיתרון

כעת לאחר שהבנו מה הבעיה בעת העברת פרמטרים לשיטת בקר API API, בואו נבדוק את הפתרונות האפשריים. אחת הדרכים להשיג זאת היא על ידי העברת האובייקט המורכב כתכונה [FromBody] ופרמטר המחרוזת דרך ה- Uri כפי שמוצג בקטע הקוד שלמטה.

$ .ajax ({

 url: 'api / author? authenticationToken = abcxyz',

 סוג: 'POST',

  נתונים: JSON.stringify (מחבר),

 dataType: 'json',

 הצלחה: פונקציה (נתונים) {

   התראה (נתונים);

}});

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

[HttpPost]

HttpResponseMessage PostAuthor ציבורי (מחבר מחבר)

{

  var data = Request.RequestUri.ParseQueryString ();

  קריטריוני מחרוזת = queryItems ["authenticationToken"];

  // קוד רגיל לאחסון נתונים בבסיס הנתונים

  החזר Request.CreateResponse (HttpStatusCode.OK, "הצלחה ...");

}

ובכן, אבל מה אם יש לך מספר אובייקטים מורכבים שיעברו כפרמטרים לשיטת בקר ה- API API? ניתן ליצור אובייקט יחיד העוטף את הפרמטרים המרובים. עיין במחלקה AuthorRequest להלן.

מעמד ציבורי מחבר בקשה

   {

      מחבר ציבורי מחבר {get; מַעֲרֶכֶת; }

      אסימון מחרוזת ציבורי {get; מַעֲרֶכֶת; }

   }

בעיקרון, אתה יכול לעטוף פרמטרים מרובים במחלקה אחת ולהשתמש במחלקה זו כפרמטר לשיטת בקר ה- Web API שלך.

הנה שיטת בקר ה- API API המעודכנת.

[HttpPost]

HttpResponseMessage PostAuthor ציבור (בקשת בקשת מחבר)

  {

       var author = בקשה. מחבר;

       token = בקשה. אסימון;

       // קוד רגיל לאחסון נתונים בבסיס הנתונים

       החזר Request.CreateResponse (HttpStatusCode.OK, "הצלחה ...");

  }

ניתן גם להשתמש ב- JObject לנתח ערכי פרמטרים מרובים מתוך אובייקט.

[HttpPost]

HttpResponseMessage PostAuthor הציבור (JObject jsonData)

{

    json דינמי = jsonData;

    JObject jauthor = json. מחבר;

    אסימון מחרוזת = json.Token;

    var author = jauthor.ToObject ();

    // קוד רגיל לאחסון נתונים בבסיס הנתונים

    החזר Request.CreateResponse (HttpStatusCode.OK, "הצלחה ...");

}

דרך נוספת לפתור זאת היא באמצעות FormDataCollection. אגב, FormDataCollection הוא אוסף צמד מפתח / ערך, בדומה ל- FormCollection ב- MVC.

[HttpPost]

        public HttpResponseMessage PostAuthor (טופס FormDataCollection)

        {

            var author = form.Get ("מחבר");

            token = form.Get ("אסימון");

            // קוד רגיל לאחסון נתונים בבסיס הנתונים

            החזר Request.CreateResponse (HttpStatusCode.OK, "הצלחה ...");

        }

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

כיצד לעשות יותר ב- ASP.NET וב- ASP.NET Core:

  • כיצד להשתמש במטמון בזיכרון ב- ASP.NET Core
  • כיצד לטפל בשגיאות ב- ASP.NET Web API
  • כיצד להעביר מספר פרמטרים לשיטות בקר API API
  • כיצד לרשום מטא נתונים של בקשה ותגובה ב- ASP.NET Web API
  • כיצד לעבוד עם HttpModules ב- ASP.NET
  • גרסאות מתקדמות ב- ASP.NET Core API
  • כיצד להשתמש בהזרקת תלות בליבת ASP.NET
  • כיצד לעבוד עם הפעלות ב- ASP.NET
  • כיצד לעבוד עם HTTPHandlers ב- ASP.NET
  • כיצד להשתמש ב- IHostedService ב- ASP.NET Core
  • כיצד לצרוך שירות WCF SOAP בליבה של ASP.NET
  • כיצד לשפר את הביצועים של יישומי ליבת ASP.NET
  • כיצד לצרוך ASP.NET Core API API באמצעות RestSharp
  • כיצד לעבוד עם כניסה לליבה ASP.NET
  • כיצד להשתמש ב- MediatR בליבת ASP.NET
  • כיצד לעבוד עם מצב הפעלה ב- ASP.NET Core
  • כיצד להשתמש בננסי ב- ASP.NET Core
  • הבן את קשירת הפרמטרים ב- ASP.NET Web API
  • כיצד להעלות קבצים ב- ASP.NET Core MVC
  • כיצד ליישם טיפול חריגים גלובלי ב- ASP.NET Core API
  • כיצד ליישם בדיקות בריאות ב- ASP.NET Core
  • שיטות עבודה מומלצות במטמון ב- ASP.NET
  • כיצד להשתמש בהודעות של Apache Kafka ב- .NET
  • כיצד להפעיל את CORS ב- API האינטרנט שלך
  • מתי להשתמש ב- WebClient לעומת HttpClient לעומת HttpWebRequest
  • כיצד לעבוד עם מטמון Redis ב- .NET
  • מתי להשתמש ב- Task.WaitAll לעומת Task.WhenAll ב- .NET