(1)  访问Rest ful接口时 Token验证  返回数据格式封装

(一)访问时Token验证  返回数据格式封装

1.1访问Api接口 方法 实现

        1.1.1 创建访问Restful Api帮助类

 public static string MyGet = "GET";
public static string MyPost = "POST";
public static string MyPut = "PUT";
public static string MyDELETE = "DELETE";
/// <summary>
/// 访问接口信息
/// </summary>
/// <param name="JsonString">抛送的字符串</param>
/// <param name="achieveUrl">访问的路径</param>
/// <param name="PublishKey">密钥Token</param>
/// <param name="Method">访问方法</param>
/// <returns></returns>
public static string SendService(string JsonString, string achieveUrl, string PublishKey, string Method)
{ //用于返回信息的记录
var responseValue = string.Empty;
if (!string.IsNullOrEmpty(achieveUrl))
{
//基于http协议的请求响应
HttpWebRequest request = WebRequest.Create(achieveUrl) as HttpWebRequest;
//提交方法
request.Method = Method;
//设置Http标头信息
request.UserAgent = "";
//设置请求超时时间
request.Timeout = * * ;
//设置读取/写入超时时间
request.ReadWriteTimeout = * * ;
//request.Headers.Add("", "");
request.Headers.Add("Token", PublishKey);
request.ContentType = @"application/json";
//判断访问方法
if (Method != "GET" && Method != "PUT")
{
request.ContentLength = Encoding.UTF8.GetByteCount(JsonString);
if (!string.IsNullOrEmpty(JsonString))//如果传送的数据不为空,并且方法是put  
{
var encoding = new UTF8Encoding();
var bytes = Encoding.GetEncoding("UTF-8").GetBytes(JsonString);// 
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, , bytes.Length);
}
}
}
//http请求的返回状态
using (var response = (HttpWebResponse)request.GetResponse())
{
//获取来自 服务器或接口的响应信息
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
}
}
}
return responseValue;
}

1.1.2  Token 加密方法

/// <summary>
/// Base64加密
/// </summary>
/// <param name="codeName">加密采用的编码方式</param>
/// <param name="source">待加密的明文</param>
/// <returns></returns>
public static string EncodeBase64(Encoding encode, string source)
{
string Result = "";
byte[] bytes = encode.GetBytes(source);
try
{
Result = Convert.ToBase64String(bytes);
}
catch
{
Result = source;
}
return Result;
} /// <summary>
/// Base64加密,采用utf8编码方式加密
/// </summary>
/// <param name="source">待加密的明文</param>
/// <returns>加密后的字符串</returns>
public static string EncodeBase64(string source)
{
return EncodeBase64(Encoding.UTF8, source);
}

   1.1.3 获取本地IP 进行加密 用作Token

   public string GetAddressIP()
{
///获取本地的IP地址
string AddressIP = string.Empty;
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
{
AddressIP = _IPAddress.ToString();
}
}
return AddressIP;
}

   1.1.4  读取Json文件 用作 访问接口抛送的内容

     public static string GetFileJson(string filepath)
{
string json = string.Empty;
using (FileStream fs = new FileStream(filepath, FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("gb2312")))
{
json = sr.ReadToEnd().ToString();
}
}
return json;
}

1.1.5 Json文件内容

    {
"Name": "Szl",
"Age": "",
"Address": "河南",
"XXXXXX": "测试数据"
}

      1.1.6 调用接口

 // GET: Home
public ActionResult Index()
{
string serviceURL = @"http://10.118.4.1x8:8082/szl/SzlAPI/Post";
string JsonString = GetFileJson(@"D:\VS2015Demo\RestServiceTest\UI\json.json");
string PublishKey = GetAddressIP();
ViewBag.Data = SendService(JsonString, serviceURL, EncodeBase64(PublishKey), "POST");
return View();
}

  1.2 Rest Api 接口声明

       1.2.1接口方法

/// <summary>
/// AspNet Core Post请求
/// </summary>
/// <param name="value">User类</param>
/// <remarks>
///访问参数
/// POST
/// {
/// "value": "0e7ad584-7788-4ab1-95a6-ca0a5b444cbb",
/// }
///
/// </remarks>
/// <response code="201">返回新创建项</response>
/// <response code="400">如果为空时</response> [HttpPost]
[ProducesResponseType(typeof(User), )]
[ProducesResponseType(typeof(User), )]
public User Post([FromBody] User value)
{
//第二种接收值得方法
//Stream stream = HttpContext.Request.Body;
//byte[] buffer = new byte[HttpContext.Request.ContentLength.Value];
//stream.Read(buffer, 0, buffer.Length);
//string content = Encoding.UTF8.GetString(buffer);
////然后Json转换
User Users = new User() { UserAddress = "北京", UserAge = "身体健康无颈椎病", UserName = "Szl", XXXXXX = "注意大小写" };
return Users;
}

       1.2.2 User类

public class User
{
/// <remarks>
/// 名称
/// </remarks> public string UserName { get; set; } = "名称";
/// <summary>
/// 年龄
/// </summary>
public string UserAge { get; set; }
/// <summary>
/// 地址
/// </summary> public string UserAddress { get; set; } /// <summary>
/// 测试字段
/// </summary>
public string XXXXXX { get; set; } }

  1.3 添加 帮助类 WebApiAuthorizationFilter 对接口访问者身份Token 解密 获取访问者IP 进行验证,对返回结果进行封装

    /// <summary>
///
/// </summary>
public class WebApiAuthorizationFilter : IAuthorizationFilter
{
/// <summary>
/// 调用者的身份验证
/// </summary>
/// <param name="context"></param>
public void OnAuthorization(AuthorizationFilterContext context)
{
//string IP = ((Microsoft.AspNetCore.Http.Internal.DefaultConnectionInfo)context.HttpContext.Connection).LocalIpAddress.ToString();
//获取客户端IP地址
string clientIP = ((Microsoft.AspNetCore.Http.Internal.DefaultConnectionInfo)context.HttpContext.Connection).RemoteIpAddress.ToString();
//获取Token信息
var Token = context.HttpContext.Request.Headers["Token"].FirstOrDefault();
//验证Token
if (Token == "")
{
context.Result = new ObjectResult(new { Success = false, code = , msg = "请查看令牌是否包含!", data = "null" });
}
else if (clientIP == DecodeBase64(Token))
{
return;
}
else
{
context.Result = new ObjectResult(new { Success = false, code = , msg = "请查看令牌是否正确!", data = "null" });
}
} /// <summary>
/// Base64解密
/// </summary>
/// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param>
/// <param name="result">待解密的密文</param>
/// <returns>解密后的字符串</returns>
public static string DecodeBase64(Encoding codeName, string result)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(result);
try
{
decode = codeName.GetString(bytes);
}
catch
{
decode = result;
}
return decode;
} /// <summary>
/// Base64解密,采用utf8编码方式解密
/// </summary>
/// <param name="result">待解密的密文</param>
/// <returns>解密后的字符串</returns>
public static string DecodeBase64(string result)
{
return DecodeBase64(Encoding.UTF8, result);
}
}

   1.4 在Startup.cs中注册服务启用 WebApiAuthorizationFilter文件

           services.AddMvc(options =>
{
//身份验证不通过是返回结果统一化
options.Filters.Add(typeof(WebApiAuthorizationFilter));
options.RespectBrowserAcceptHeader = true;
});

不加Token的结果

访问正确结果

注意 返回结果中的data的字段名 大小写的变化  前边的四位默认小写了 这是框架本身Json序列化的结果

解决方法  在Startup.cs中注册服务

services.AddMvc()
//默认返回值 大小写不变
.AddJsonOptions(op => op.SerializerSettings.ContractResolver =new Newtonsoft.Json.Serialization.DefaultContractResolver());

今天结束 本来下面的也要说说的太晚了留着明天吧

(2)  程序错误时  返回数据格式封装

(3)  返回结果包装

(4)  访问方法时 参数必填与非必填的声明

    代码中有不对的或者有更好的方法希望大家告之 相互学习 谢谢,转载注明出处

AspNet Core Api Restful +Swagger 实现微服务之旅 (三)的更多相关文章

  1. AspNet Core Api Restful +Swagger 实现微服务之旅(四)

    这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习. 接着上一篇的内容 (2)  程序错误时  返回数据格 ...

  2. AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  3. AspNet Core Api Restful +Swagger 发布IIS

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  4. AspNet Core Api Restful 实现微服务之旅 (一)

    (一)了解微服务(二)搭建VS项目框架  (三)创建AspNet Core Api VS2017 安装包   链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...

  5. 认证鉴权与API权限控制在微服务架构中的设计与实现(四)

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...

  6. 微服务(入门三):netcore ocelot api网关结合consul服务发现

    简介 api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接. ocelot是基于netcore开发的开源API网关项目,功能强大,使用方便,它 ...

  7. 在 Docker 上运行一个 RESTful 风格的微服务

    tags: Microservice Restful Docker Author: Andy Ai Weibo:NinetyH GitHub: https://github.com/aiyanbo/d ...

  8. 微服务介绍及Asp.net Core实战项目系列之微服务介绍

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.微服务选型 在做微服务架构的技术选型的时候,我们以“无侵入”和“社区活跃”为主要的考量点,将来升级为原子服务架构.量子服务架构 ...

  9. .net core中使用Bumblebee架设微服务网关

    Bumblebee是款基于.net core开发开源的http服务网关,经过最近版本的完善在功能足以满足作为微服务网关的需要.在微服务网关功能中它提供了应用服务负载,故障迁移,安全控制,监控跟踪和日志 ...

随机推荐

  1. HTML5轻松实现拍照上传功能[转载]

    转载 http://www.18sucai.com/article/275.htm 传统方法如果想实现拍照功能,需要后台应用程序复杂的编写,但随着html5的发展,在HTML5规范的支持下,Web A ...

  2. html网页中加载js脚本 下载下来是乱码(文件编码格式)

    问题描述: 在一个index.html网页中,引入了jquery脚本,但是却出现错误,提示$ is not defined <!DOCTYPE html> <html lang=&q ...

  3. 「Vue」起步 - vue-router路由与页面间导航

    vue-router 我们知道路由定义了一系列访问的地址规则,路由引擎根据这些规则匹配找到对应的处理页面,然后将请求转发给页进行处理.可以说所有的后端开发都是这样做的,而前端路由是不存在"请 ...

  4. HTML学习笔记 css定位浮动及瀑布流案例 第十三节 (原创) 参考使用表

    #fd { width: 100px; height: 150px; background-color: forestgreen; float: left; } #sd { width: 150px; ...

  5. Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  6. mysql使用use db出现夯住问题

    表的数目在15585个,在使用use db的时候出现夯住 从show processlist中看到一堆表在做排序,想看看这些表的表结构.使用use db之后夯住,没有办法查看. 当时没有想到怎么办,鉴 ...

  7. Angular i18n的技术分享、踩过的坑

    1.安装 npm @ngx-translate/core --save npm @ngx-translate/http-loader 2.配置(文本背景部分为该模块新增的)~app.module.ts ...

  8. osap一站式分析模型

    运营系统分析平台技术设计: 项目定义于运营系统关键指标的数据分析 关键代码描述: HiveWriter 主要用于写hive表抽象,包括加分区,写hive表,写success文件: import org ...

  9. 智能合约开发环境搭建及Hello World合约

    如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...

  10. [最短路]P1828 香甜的黄油 Sweet Butter

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...