(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. Azkaban 2.5.0 搭建和一些小问题

    安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: /usr/local/ae/ankaban JDK 安装目录: export JAVA_HOME=/usr/ ...

  2. Hive中常用的查询命令

    日志数据的统计处理在这里反倒没有什么特别之处,就是一些 SQL 语句而已,也没有什么高深的技巧,不过还是列举一些语句示例,以示 hive 处理数据的方便之处,并展示 hive 的一些用法. a)    ...

  3. YARN作业运行机制

    在传统的MapReduce中, Jobtracker同时负责作业调度(将任务调度给对应的tasktracker)和任务进度管理(监控任务, 重启失败的或者速度比较慢的任务等). YARN中将Jobtr ...

  4. 桌面消息通知:HTML5 Notification

    先上一段完整代码 //注册权限 Notification.requestPermission(function (status) { // 这将使我们能在 Chrome/Safari 中使用 Noti ...

  5. 如何成为一个javascript高手【转载】

      原文网址: http://www.cnblogs.com/keva/p/how-to-become-a-javascript-badass.html 英文网址:http://www.clientc ...

  6. php缓存模块apc可能导致php-fpm终止

    如果你的网站出现502错误.同时你网站中又使用了apc模块来做缓存处理.那么这篇文章兴许能帮到你. 首先,查看了php-fpm 的进程数. 发现php-fpm的进程数已经到达了php-fpm.conf ...

  7. .net ef core 领域设计代码转换(上篇)

    一.前言 .net core 2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍 传送门:https://docs.microsoft.com/zh-cn/dot ...

  8. asp.net后台发送HTTP请求

    一.文件流方式(转自:http://blog.csdn.net/u011511086/article/details/53216330) /// 发送请求 /// </summary> / ...

  9. 一篇文章让你明白python的装饰器

    在看闭包问题之前先来看看关于python中作用域的问题 变量作用域 对于上述代码中出现错误,肯定没什么疑问了,毕竟b并没有定义和赋值,当我们把代码更改如下后: 再看一个例子: 首先这个错误已经非常明显 ...

  10. Caused by: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 49; 前言中不允许有内容。

    今天刚开始学习mybatis时,自己去尝试使用mybatis链接数据库,操作数据局时,报了一个下面的错误 Caused by: org.xml.sax.SAXParseException; lineN ...