Cum pot face apeluri de la un REST api, folosind C#?
Acesta este codul pe care îl avea până acum:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;
namespace ConsoleProgram
{
public class Class1
{
private const string URL = "https://sub.domain.com/objects.json?api_key=123";
private const string DATA = @"{""object"":{""name"":""Name""}}";
static void Main(string[] args)
{
Class1.CreateObject();
}
private static void CreateObject()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = DATA.Length;
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
requestWriter.Write(DATA);
requestWriter.Close();
try {
WebResponse webResponse = request.GetResponse();
Stream webStream = webResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(webStream);
string response = responseReader.ReadToEnd();
Console.Out.WriteLine(response);
responseReader.Close();
} catch (Exception e) {
Console.Out.WriteLine("-----------------");
Console.Out.WriteLine(e.Message);
}
}
}
}
Problema este că eu cred că excepția de bloc este declanșat (pentru că atunci când am elimina try-catch, primesc o eroare de server (500) mesaj. Dar eu nu't vedea Consola.Liniile le-am pus în bloc catch.
Consola Mea:
`nimic Firul 'vshost.NotifyLoad' (0x1a20) s-a terminat cu codul 0 (0x0). Firul '' (0x1988) s-a terminat cu codul 0 (0x0). Firul 'vshost.LoadReference' (0x1710) s-a terminat cu codul 0 (0x0). 'ConsoleApplication1.vshost.exe' (Gestionate (v4.0.30319)): Încărcat de 'c:\users\l. preston sego iii\documente\visual studio 11\Proiecte\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe', Simboluri încărcate. 'ConsoleApplication1.vshost.exe' (Gestionate (v4.0.30319)): Încărcat 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'în grabă, de încărcare simboluri. Modulul este optimizat și debugger opțiune 'Doar Codul Meu' este activat. O primă șansă excepție de tip 'System.Net.WebException' au avut loc în System.dll Firul 'vshost.RunParkingWindow' (0x184c) s-a terminat cu codul 0 (0x0). Firul '' (0x1810) s-a terminat cu codul 0 (0x0). Programul '[2780] ConsoleApplication1.vshost.exe: Program Trace' a ieșit cu codul 0 (0x0). Programul '[2780] ConsoleApplication1.vshost.exe: Reusit (v4.0.30319)' a ieșit cu codul 0 (0x0). ``
Am'm folosind Visual Studio 2011 Beta, și .NET 4.5 Beta.
La ASP.Net API Web a înlocuit WCF Web API menționate anterior.
Am crezut că am'd post actualizat răspuns deoarece cele mai multe dintre aceste răspunsuri sunt de la începutul anului 2012, iar acest thread este unul dintre primele rezultate atunci când faci o căutare pe Google pentru "apel odihnitor serviciu c#".
Orientări actuale de la Microsoft este de a utiliza Microsoft ASP.NET Web API Client Biblioteci pentru a consuma o zi de serviciu. Acesta este disponibil ca un pachet de NuGet, Microsoft.AspNet.WebApi.Client. Veți avea nevoie pentru a adăuga acest pachet NuGet la o soluție.
Aici's cum de exemplu s-ar uita atunci când sunt implementate folosind ASP.Net Web API Client Library:
Dacă aveți de gând pentru a face mai multe cereri, ar trebui să re-folosi HttpClient exemplu. A se vedea această întrebare și răspunsuri pentru mai multe detalii despre ce o folosesc declarație nu a fost folosit pe HttpClient exemplu în acest caz: https://stackoverflow.com/questions/15705092/do-httpclient-and-httpclienthandler-have-to-be-disposed
Pentru mai multe detalii, inclusiv alte exemple, du-te aici: http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
Acest blog poate fi, de asemenea, util: http://johnnycode.com/2012/02/23/consuming-your-own-asp-net-web-api-rest-service/
Sugestia mea ar fi să utilizați RestSharp. Puteți efectua apeluri la RESTUL serviciilor și le-au aruncat în POCO obiecte cu foarte puțin cod șabloane pentru a avea de fapt pentru a analiza prin răspunsul. Acest lucru nu va rezolva special de eroare, dar răspunsurile dumneavoastră generală întrebarea cum de a face apeluri la RESTUL serviciilor. A schimba codul de a utiliza ar trebui să plătească în ușurința de utilizare și robustețea în mișcare înainte. Care este de doar 2 cenți, deși
Fără nici o legătură, am'm sigur, dar nu înfășurați ta
IDisposable
obiecte în "folosind" blocuri pentru a asigura buna dispozitie:Vă rugăm să folosiți codul de mai jos pentru REST api cerere
Aici sunt câteva moduri diferite de asteptare un API extern în C# (actualizat 2019).
.NET's built-in moduri:
Gratuit, open-source Pachete NuGet, care, sincer, au o mult mai bine producător experiență mult .NET's construit în clienți:
Toate pachetele de mai sus oferă o mare producător de experiență (de exemplu, concis, ușor de API) și sunt bine întreținute.
*()** în August 2019
Exemplu: Noțiuni de bază un element Todo de la un Fals Rest API folosind ServiceStack.Text. Alte biblioteci au sintaxă foarte asemănătoare.
Rularea exemplul de mai sus într-un .NET Core Consolă aplicație, produce următoarea ieșire.
Instala aceste pachete folosind NuGet
Actualizare pentru asteptare un REST API atunci când se utilizează .NET 4.5 sau .NET Core
Aș sugera DalSoft.RestClient (avertisment l-am creat). Motivul fiind că acesta utilizează dinamice puteți încadra totul într-un singur fluent apel, inclusiv serializarea/deserializarea. Mai jos este un lucru PUS de exemplu:
Aș dori să-mi împart soluție în ASP.NET Core
Pentru a posta folosi ceva de genul asta:
Exemplu pentru a șterge:
Exemplu pentru a obține lista:
Exemplu pentru a obține o singură:
OBȚINE:
POST:
Notă: Pentru a serializa și desirialze JSON am folosit Newtonsoft.Json pachete NuGet.
Check out Refit pentru a face apeluri la restul serviciilor din .net. Am'am găsit-o foarte ușor de utilizat: https://github.com/paulcbetts/refit
Acesta este un exemplu de cod care funcționează sigur. Mi-a luat o zi pentru a face acest lucru pentru a citi un set de obiect din Restul de servicii:
RootObject este tipul de obiect Im lectură de restul serviciu.
Am făcut-O în acest mod simplu, cu Api web 2.0. Puteți elimina UseDefaultCredentials.Am folosit-o pentru uzul meu de cazuri.
Din moment ce sunt utilizați Visual Studio 11 Beta, veți dori să utilizați cele mai recente și mai mare. Noul Api Web conține clase pentru acest lucru.
Vezi HttpClient: http://wcf.codeplex.com/wikipage?title=WCF%20HTTP
primul pas este de a crea helper class for http client.
Apoi, puteți utiliza această clasă în cod.
acesta este un exemplu de cum suna restul api fără purtător folosind o clasa mai sus.
acesta este un exemplu de cum poti numi rest api care necesită purtător.
de asemenea, puteți să consultați mai jos repo dacă doriți să vedeți de lucru exemplu de cum funcționează.
https://github.com/mokh223/callApi