如何从控制台应用程序调用REST API?

11

如何从控制台应用程序调用REST API?

我的REST服务的响应将是XML格式。

在Web中,我是这样调用的

string url = string.Format("{0}/name?PrimaryName={1}", ConfigurationManager.AppSettings["URLREST"], txtName.Text);
string details= CallRestMethod(url);

public string CallRestMethod(string url)
{                        
    HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url);            
    webrequest.Method = "GET";           
    webrequest.ContentType = "application/x-www-form-urlencoded";
    webrequest.Headers.Add("Username", "xyz");
    webrequest.Headers.Add("Password", "abc");            
    HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();            
    Encoding enc = System.Text.Encoding.GetEncoding("utf-8");            
    StreamReader responseStream = new StreamReader(webresponse.GetResponseStream(), enc);   
    string result = string.Empty;         
    result = responseStream.ReadToEnd();            
    loResponseStream.Close();           
    webresponse.Close();
    return result;
}

我想在控制台应用程序中调用相同的方法。

我该怎么做?


6
在控制台应用程序中做这件事情的障碍是什么?HttpWebRequest位于System程序集中,而不是System.Web程序集中。 - Maarten
1
@JIKKU,我不知道为什么你不能在控制台中使用相同的代码,请解释得更详细一些。 - sandeep
2个回答

29

尝试这段代码class Program 名称空间应该是


名称空间应该是

using System.Net;
using System.IO;
{
    static void Main(string[] args)
    {
        string url = string.Format("{0}/name?PrimaryName={1}", System.Configuration.ConfigurationManager.AppSettings["URLREST"], "yournmae");
        string details = CallRestMethod(url);
    }

    public static string CallRestMethod(string url)
    {
        HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url);
        webrequest.Method = "GET";
        webrequest.ContentType = "application/x-www-form-urlencoded";
        webrequest.Headers.Add("Username", "xyz");
        webrequest.Headers.Add("Password", "abc");
        HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
        Encoding enc = System.Text.Encoding.GetEncoding("utf-8");
        StreamReader responseStream = new StreamReader(webresponse.GetResponseStream(), enc);
        string result = string.Empty;
        result = responseStream.ReadToEnd();            
        webresponse.Close();
        return result;
    }
}

嗨,有可能只省略所有的流程并直接从以下这行代码中获取响应正文吗:HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();如果不行,这行代码的意义何在... - user4158347

1
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Net.Http.Formatting;

namespace TestingRESTAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            RunAsync().Wait();
        }

        static async Task RunAsync()
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("<<provide your uri>>");
                //client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth","xyz");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                Console.WriteLine("Get");
                HttpResponseMessage response = await client.GetAsync("<<provide your uri>>");
                if(response.IsSuccessStatusCode)
                {
                    Sites sites = await response.Content.ReadAsAsync<Sites>();
                    Console.WriteLine("Name: " + sites.name + "," + "Year: " + sites.yearInscribed);
                }

                Console.WriteLine("Post");

                Sites newsite = new Sites();
                newsite.name = "Ryan";
                newsite.yearInscribed = "2019";
                response = await client.PostAsJsonAsync("api/sites", newsite);
                if(response.IsSuccessStatusCode)
                {
                    Uri siteUrl = response.Headers.Location;
                    Console.WriteLine(siteUrl);
                }

            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接