【问题标题】:how to call web api or other restful web services in c#如何在 C# 中调用 web api 或其他 RESTful Web 服务
【发布时间】:2018-04-05 10:38:36
【问题描述】:

我可以通过 ajax 请求调用每个 webApi 方法,但我不能通过 c# 来调用。 这是一个简单的 web api,每个人都可以在 asp.net mvc web api 中创建它,但我找不到任何关于调用的示例并通过 c# 以编程方式获取它。

  public class TestController : ApiController
{
    // GET: api/Test
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

请有人告诉我如何在 c# 中调用这个 web api 方法并获取这两个值。我们如何在 c# 中从 Web 服务(RestFull-without reference)中获取价值?

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-web-api asp.net-mvc-5.2


【解决方案1】:

答案是这样的......所有给出负面反应的人都可以这样做而不是负面反应:

        string GET(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        try
        {
            WebResponse response = request.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
        }
        catch (WebException ex)
        {
            WebResponse errorResponse = ex.Response;
            using (Stream responseStream = errorResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                String errorText = reader.ReadToEnd();
                // log errorText
            }
            throw;
        }
    }

这么简单!

【讨论】:

    【解决方案2】:

    在c#中调用WEB API可以使用HttpClient类。

    public class Client
    {
       private readonly string baseUri;
       private static HttpClient _client;
    
        public Client(string baseUri)
        {
            this.baseUri = baseUri;
    
            _client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true })
            {
                BaseAddress = new Uri(baseUri)
            };
    
            _client.DefaultRequestHeaders.Accept.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        }
    
        public async Task<SomeResource> GetResourceById(int Id)
        {
            var path = $"{baseUri}/Resources/{Id}";
    
            var response = await _client.GetAsync(path);
    
            return await response.Content.ReadAsAsync<SomeResource>();           
        }
    

    【讨论】:

      【解决方案3】:

      创建一个 HttpClient (https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.118).aspx) 并调用它的 GetAsync() https://msdn.microsoft.com/en-us/library/hh158912(v=vs.118).aspx 方法。我假设您在本地运行此程序,因此您的 Uri 可能类似于http://localhost/test/get,具体取决于您在按 F5 时如何配置 Visual Studio。这是一个完整的例子:https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client

      【讨论】:

        猜你喜欢
        • 2011-01-18
        • 2016-06-23
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多