דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. לגשת לWEB API כ serviceRefernce

לגשת לWEB API כ serviceRefernce

מתוזמן נעוץ נעול הועבר ארכיון code613m
4 פוסטים 2 כותבים 357 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • י מנותק
    י מנותק
    יאן גולד
    כתב ב נערך לאחרונה על ידי
    #1

    יש לי קונטרולר API כזה:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    using WebApiProducts.Models;
    
    namespace WebApiProducts.Controllers
    {
        public class HomeController : ApiController
        {
            List<Produuct> products = new List<Produuct>();
    
            public IEnumerable<Produuct> GetAllProducts()
            {
                GetProducts();
                return products;
            }
    
            private void GetProducts()
            {
                products.Add(new Produuct { Id = 1, Name = "Television", Category = "Electronic", Price = 82000 });
                products.Add(new Produuct { Id = 2, Name = "Refrigerator", Category = "Electronic", Price = 23000 });
                products.Add(new Produuct { Id = 3, Name = "Mobiles", Category = "Electronic", Price = 20000 });
                products.Add(new Produuct { Id = 4, Name = "Laptops", Category = "Electronic", Price = 45000 });
                products.Add(new Produuct { Id = 5, Name = "iPads", Category = "Electronic", Price = 67000 });
                products.Add(new Produuct { Id = 6, Name = "Toys", Category = "Gift Items", Price = 15000 });
            }
    
            public IEnumerable<Produuct> GetProducts(int selectedId)
            {
                if (products.Count() > 0)
                {
                    return products.Where(p => p.Id == selectedId);
                }
                else
                {
                    GetProducts();
                    return products.Where(p => p.Id == selectedId);
                }
            }
    
    
    
           
        }
    }
    

    שאני רוצה לגשת אליו מ wifForm, עשיתי בוינפורם צרף סרוויס רפרנס ונתתי את הURL של הAPI
    קיבלתי הודעת שגיאה.
    כאן מדברים על זה אבל לא הבנתי אם נתנו תשובה או רק אמרו שאי אפשר.
    בכל אופן מה כן הדרך?

    תודה רבה

    פורסם במקור בפורום CODE613 ב26/05/2016 19:45 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      Service Reference זה מיועד בשביל Web Service מהסוגים שנתונים סכמה ממנה ניתן לבנות את כל המתודות והפרמטרים הקיימים, ואז זה אין בweb api (מה שנקרא rest).
      אז מה עושים? עובדים טיפה ידנית, ראה פה:
      http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client
      המאמר שמה משתמש במחלקה Microsoft.AspNet.WebApi.Client, מה שהיא עושה מעבר לבקשות ידניות מהשרת זה זה מיפוי JSON או XML לאובייקטים.
      ישנה מחלקה נוספת אולי קלה יותר לעבודה מול WebApi, שמה RestSharp ותוכל להתקינה גם דרך nuget.

      במקרה שלך שגם אתה עשית את הצד שרת זה מאוד פשוט: עליך לשתף את הלקוח במחלקות
      (או ע"י שתשים את המחלקות בפרוייקט עצמאי ויהיה גם לשרת וגם ללקוח רפרנסים עליו, או ע"י שתוסיף ללקוח קובץ מקושר - "linked file" ואז אותו הקובץ של המחלקות מקומפל הן לDLL של הלקוח והן לצד השרת. כשמדובר בapi שלא שלך ניתן ליצור את המחלקות בקלות ע"י העתקה של פלט הjson ובVS לבחור בתפריט Edit בSpecial Past ושם Json As Class).
      ואז לעשות כמו שרואים במאמר הנ"ל.

      פורסם במקור בפורום CODE613 ב26/05/2016 20:46 (+03:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      0
      • י מנותק
        י מנותק
        יאן גולד
        כתב ב נערך לאחרונה על ידי
        #3

        שיתפתי את הלקוח בספריה אבל הוא כותב שה-JSON לא מאותו סוג, אלא הסוג שהתקבל הוא מערך של [1,2,3]
        ואני מנסה להכניס אותו לאובייקט כזה { Place: 'Israel' ,Name:' jerusalem'} לדוגמא.
        זה מאוד מוזר כי ה-JSON נבנה לפי המחלקה של השרת שעשיתי לה קופי פייסט ללקוח.

        חוץ מזה, במקרה שה API לא שלי
        נתקעתי בנקודה של לתפוס את הפלט של הJSON

        אני לא מצליח למצוא את התוכן ב response

        רק באופן הזה:
        [code2= csharp:2c1lm506]var product = await response.Content.ReadAsStringAsync();[/code2:2c1lm506]
        אבל כל הצורה של האובייקט נהרסה.

        פורסם במקור בפורום CODE613 ב27/05/2016 01:36 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

          אתה צריך לקבל את הJSON באופן שנשלח. אצלך זה נשלח כIEnumerable של Producet, אז ככה אתה צריך לקבל אותו. ניסיתי אצלי ועבד:

          client.BaseAddress = new Uri("http://localhost:24798/");
          client.DefaultRequestHeaders.Accept.Clear();
          client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
          
          HttpResponseMessage response = await client.GetAsync("api/values/1");
          if (response.IsSuccessStatusCode)
          {
              IEnumerable<Produuct> products = await response.Content.ReadAsAsync<IEnumerable<Produuct>>();
          }
          

          בקשר לAPI שאיננו שלך אז אני הסברתי שאתה יכול להעתיק ללוח את הJSON (קח אותו מהדפדפן או מReadAsStringAsync), ואז להדביק בהבקה מיוחדת כפי שכתבתי בתפריט Edit > Past Special > Past Json As Classes

          פורסם במקור בפורום CODE613 ב27/05/2016 13:50 (+03:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          1

          בא תתחבר לדף היומי!
          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום