มีวิธีใดบ้างในการสร้าง C# HTTPClient wrapper สำหรับโครงการ WebAPI [ปิด]

ในโครงการที่กำลังจะมาถึง เราต้องการใช้ ASP.NET WebAPI 2 เพื่อเปิดเผยฟังก์ชันการทำงานของบริการแก่ทั้งเว็บไซต์และไคลเอนต์เบราว์เซอร์ของเรา

เนื่องจากเราต้องการ "จุดสิ้นสุด" น้อยที่สุดเท่าที่จะเป็นไปได้ เราต้องการให้การโทรทั้งหมด แม้แต่ "ภายใน" ใช้งานเซิร์ฟเวอร์ของเราจากบริการเว็บ WebAPI (เช่น ไม่ใช่แค่การสร้างอินสแตนซ์คอนโทรลเลอร์ใหม่โดยตรง)

ฉันกำลังมองหาบางอย่างที่จะช่วยสร้างหรือรองรับ C# "ไคลเอนต์" ที่ล้อมรอบ HTTPClient และส่งมอบ "พร็อกซี" ที่พิมพ์อย่างยิ่ง คล้ายกับ WCF เมื่อสร้างพร็อกซีผ่าน "เพิ่มการอ้างอิงบริการใหม่"

ฉันได้อ่านคำถามอื่นที่ถามสิ่งที่คล้ายกัน (เท่าที่เห็น ที่นี่) แต่ต้องการถามคำถามที่ตรงกว่านี้ซึ่งไม่เกี่ยวข้องกับ MVC หรือข้อกังวลในการทดสอบ


person BoxOfNotGoodery    schedule 21.10.2013    source แหล่งที่มา
comment
นี่คือการนำเสนอสิ่งที่ฉันกำลังมองหาได้ดีที่สุด: faniereynders.com/ 2013/03/aspnet-web-api.html หวังว่าสิ่งนี้อาจจะออกมาอย่างเป็นทางการในภายหลัง...   -  person BoxOfNotGoodery    schedule 22.10.2013
comment
อัปเดต: AutoRest github.com/Azure/autorest   -  person BoxOfNotGoodery    schedule 20.07.2018


คำตอบ (4)


นี่คือการนำเสนอสิ่งที่ฉันกำลังมองหาได้ดีที่สุด:

ASP.NET Web API ‹#= พร็อกซีของ T4 #>

แนะนำ WebApiProxy : จัดเตรียม JavaScript & C# proxies ด้วย Intellisense รวมถึงเอกสารประกอบสำหรับ ASP.NET Web API

เขาวางโค้ดตัวอย่างของเขาบน github:

https://github.com/RestCode/WebApiProxy

หวังว่าเรื่องนี้คงจะออกมาอย่างเป็นทางการในภายหลัง

person BoxOfNotGoodery    schedule 28.10.2013

ขณะนี้ฉันกำลังทำงานกับ Swagger toolchain โอเพ่นซอร์สสำหรับ .NET ด้วยเครื่องมือเหล่านี้ คุณสามารถเลือกตัวควบคุม Web API จาก DLL ที่มีอยู่ และสร้างข้อกำหนด Swagger หรือรหัสไคลเอ็นต์สำหรับ C# และ TypeScript การใช้เทมเพลต T4 ใน Visual Studio กระบวนการสร้างทำงานเหมือนกับการอ้างอิงบริการ WCF

ดูที่นี่: http://NSwag.org

ป้อนคำอธิบายรูปภาพที่นี่

person Rico Suter    schedule 25.09.2015
comment
นี่ดูน่าสนใจ การเพิ่มการรองรับ VB จะยากแค่ไหน? - person InteXX; 27.01.2017
comment
ฟีเจอร์นี้ไม่ได้วางแผนไว้ แต่มีเครื่องมือในการแปลง c# เป็น vb.net - person Rico Suter; 25.02.2017
comment
ฉันจินตนาการว่าตอนนี้กับการมาถึงของโรสลิน ขั้นตอนดังกล่าวสามารถทำให้เป็นไปโดยอัตโนมัติได้ ดูเหมือนยูทิลิตี้ที่ดีที่คุณสร้างขึ้นที่นี่ ทำหน้าที่ให้ดีต่อไป - person InteXX; 25.02.2017

วิธีที่พบบ่อยที่สุดที่ฉันเคยเห็นในการนำเสนอฟังก์ชันการทำงานของ web api ที่ใช้งานง่ายคือการมีแอสเซมบลีซึ่งกำหนดคลาสหลักรวมถึงฟังก์ชันการโพสต์บางอย่าง แอสเซมบลีนี้ใช้ JSON เพื่อถ่ายโอนข้อมูล

ดูว่า API ที่ผสานรวมของ PayPal ทำงานอย่างไร โดยพื้นฐานแล้วพวกเขาจะให้ชุดประกอบซึ่งประกอบด้วยคำจำกัดความสำหรับคลาสต่างๆที่ใช้งานอยู่ มีคลาสสำหรับถ่ายโอนข้อมูลไปยังเซิร์ฟเวอร์

แนวคิดก็คือลูกค้าไม่สนใจว่าพวกเขาจะสื่อสารกับคุณอย่างไร (ทั้งหมดนี้อยู่ในกล่องดำ) อย่างไรก็ตาม พวกเขามีตัวเลือกในการใช้คลาสที่กำหนดไว้ล่วงหน้าหรือเลือกคลาสเอง

person NotMe    schedule 21.10.2013
comment
ฉันเชื่อว่าข้อกังวลหลักคือการแมประหว่าง uris สัมพัทธ์ของบริการต่างๆ และวิธีการที่สอดคล้องกัน ดังนั้นแทนที่จะใช้ชุดวิธีการทั่วไปที่ยอมรับ uris คุณจะมีชุดวิธีการจำนวนมาก เมื่อวิธีการเดียวสอดคล้องกับการเรียก api ครั้งเดียว คำถามไม่ใช่ว่าเป็นไปได้หรือไม่ แต่เห็นได้ชัดว่าการห่อ API นั้นสามารถเข้ารหัสด้วยมือได้อย่างง่ายดาย แต่จะสร้างมันโดยอัตโนมัติโดยใช้วิธีการที่มีอยู่ได้อย่างไร - person Wiktor Zychla; 21.10.2013

ฉันว่าคุณไม่จำเป็นต้องมีไลบรารี่เต็มรูปแบบเพื่อเข้าถึงข้อมูล หากคุณมีวัตถุข้อมูลที่กำหนดไว้ในไลบรารีทั่วไป คุณสามารถใช้วิธีตัวช่วยทั่วไปเพื่อทำสิ่งที่ต้องการได้

    public static TItem GetItem<TItem>(this HttpClient httpClient, string queryString) where TItem : class
    {
        var response = httpClient.GetAsync(queryString).Result;
        if (response.IsSuccessStatusCode)
        {
            return response.Content.ReadAsAsync<TItem>().Result;
        }

        throw new HttpRequestException(response.ToString());
    }

แต่เปลี่ยนแปลงเพื่อการจัดการข้อผิดพลาดของคุณเอง ฯลฯ

person Allan Elder    schedule 21.10.2013