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=".\logs\stdout" 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     

posted @ 2021-04-15 11:32  哈哈哈嗝  阅读(1491)  评论(2编辑  收藏  举报