zoukankan      html  css  js  c++  java
  • C# WebApi 调用

    //HttpClient调用帮助类
      public static class HttpRequestHelper
        {
            #region Get调用
            /// <summary>
            /// 使用get方法异步请求
            /// </summary>
            /// <param name="url">目标链接</param>
            /// <returns>返回的字符串</returns>
            private async static Task<HttpResponseMessage> GetResponseAsync(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
            {
                try
                {
                    HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
                    StringBuilder builder = new StringBuilder();
                    builder.Append(url);
                    if (header != null)
                    {
                        client.DefaultRequestHeaders.Clear();
                        foreach (var item in header)
                        {
                            client.DefaultRequestHeaders.Add(item.Key, item.Value);
                        }
                    }
                    if (parame != null && parame.Count > 0)
                    {
                        builder.Append("?");
                        int i = 0;
                        foreach (var item in parame)
                        {
                            if (i > 0)
                                builder.Append("&");
                            builder.AppendFormat("{0}={1}", item.Key, item.Value);
                            i++;
                        }
                    }
                    HttpResponseMessage response = await client.GetAsync(builder.ToString());
                    response.EnsureSuccessStatusCode();//用来抛异常的
    
                    return response;
                }
                catch (Exception e)
                {
                    //在webapi中要想抛出异常必须这样抛出,否则之抛出一个默认500的异常
                    var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        Content = new StringContent(e.ToString()),
                        ReasonPhrase = "error"
                    };
                    throw new HttpResponseException(resp);
                }
            }
    
            public static async Task<string> GetStringAsync(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
            {
                var response = await GetResponseAsync(url, header, parame);
                return await response.Content.ReadAsStringAsync();
            }
    
            /// <summary>
            /// 使用Get返回异步请求返回List集合
            /// </summary>
            /// <typeparam name="T"></typeparam> 
            /// <returns></returns>
            public static async Task<List<T>> GetListAsync<T>(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
            {
                var response = await GetResponseAsync(url, header, parame);
                return response.Content.ReadAsAsync<List<T>>().Result;
            }
    
            #endregion
    
            #region Post调用
            /// <summary>
            /// 使用post方法异步请求
            /// </summary>
            /// <param name="url">目标链接</param>
            /// <param name="json">发送的参数字符串-json</param>
            /// <returns>返回的字符串</returns>
            public static async Task<string> PostAsync(string url, string json, Dictionary<string, string> header = null, bool Gzip = false)
            {
                HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
                HttpContent content = new StringContent(json);
                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                if (header != null)
                {
                    client.DefaultRequestHeaders.Clear();
                    foreach (var item in header)
                    {
                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
                    }
                }
                HttpResponseMessage response = await client.PostAsync(url, content);
                response.EnsureSuccessStatusCode();
                string responseBody;
                if (Gzip)
                {
                    GZipInputStream inputStream = new GZipInputStream(await response.Content.ReadAsStreamAsync());
                    responseBody = new StreamReader(inputStream).ReadToEnd();
                }
                else
                {
                    responseBody = await response.Content.ReadAsStringAsync();
    
                }
                return responseBody;
            }
            #endregion
    
            //Put、Delete方式相同 
        }
    View Code

     同一控制器包含多个API接口,通过指定路由实现,如图:

     效果:

     .NetCore swagger发布到iis时访问api出现404的解决方案

    介绍
    使用netcore作为纯后端提供api已经变得越来越频繁,swagger也成为很多人的选择。通常会在代码中限制ASPNETCORE_ENVIRONMENT为Production时关闭swagger。但是往往我们需要将api发布到本地iis调试或供他人使用时,swagger将会被禁止。发布后项目往往默认为Production环境,将其修改为Development即可解决。

    解决方法
    打开发布到iis的文件夹下的web.config文件,添加以下代码:

    <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    </environmentVariables>

    修改后的web.config结构大致如下:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <location path="." inheritInChildApplications="false">
    <system.webServer>
    <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments="*.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" hostingModel="InProcess">
    <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    </environmentVariables>
    </aspNetCore>
    </system.webServer>
    </location>
    </configuration>
    <!--ProjectGuid: 15af0485-b65a-422a-bf12-5877b85abb6c-->

    .NET Core中如何读取appsetting.json配置文件

    appsetting.json中填入配置

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "Config": {
        "DbConnectionString": "Database=test;Data Source=127.0.0.1;User Id=root;Password=root;charset=utf8;pooling=true"
      }
    } 

    编写配置文件操作类

    /// <summary>
    /// 读取appsetting配置
    /// </summary>
    public static class AppSetting
    {
      private static IConfigurationSection _configurationSection = null;
      /// <summary>
      /// 读取配置
      /// </summary>
      /// <param name="key"></param>
      /// <returns></returns>
      public static string GetAppSetting(string key)
      {
          return _configurationSection.GetSection(key)?.Value;
      }
      /// <summary>
      /// 设置配置
      /// </summary>
      /// <param name="section"></param>
      public static void SetAppSetting(IConfigurationSection section)
      {
          _configurationSection = section;
      }
    }

    在Startup.cs的ConfigureServices中设置配置

    public void ConfigureServices(IServiceCollection services)
    {
      // ...
      // 设置配置
      AppSetting.SetAppSetting(Configuration.GetSection("Config"));
    }

    使用配置

    string connStr = AppSetting.GetAppSetting("PgConnectionString");

    相关文章链接 :     

    http://blog.itpub.net/28974745/viewspace-2761941/             

    https://blog.csdn.net/gtosky4u/article/details/113886135                                                                                                                                                                                                                                                                                                 https://www.cnblogs.com/liuqiyun/p/9144816.html

    https://blog.csdn.net/u011127019/article/details/53021164

    (简单API接口创建教程)

    https://www.jianshu.com/p/364f1842cae5

    https://www.cnblogs.com/guohu/p/12982850.html     

    如果这篇文章对你有帮助的话,评论或推荐下吧!(转载请注明原作者!)
  • 相关阅读:
    ios布局约束
    IOSanimationDidStop
    iosanimationWithKeyPath
    CALayer的分析
    关于集合的小demo
    关于集合越界后 不能使用迭代器遍历的处理方式
    html--day02
    关于LIst Set Map 异常的知识点---我的笔记
    css入门
    html相关标记的含义
  • 原文地址:https://www.cnblogs.com/Liyuting/p/14661742.html
Copyright © 2011-2022 走看看