在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们。

项目名称:Asp.NetCoreExperiment

项目地址:https://github.com/axzxs2001/Asp.NetCoreExperiment

asp.net core mvc的模板中返回前端时可以用IActionResult的子类,来区分不同的返回内容,那怎么来实现自定义的ActionResult呢?

github代码如下:

https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/Common/YamlResultDemo

首先引用一个三方包

PM> Install-Package YamlDotNet

YamlResult.cs

     /// <summary>
/// YamlResul
/// </summary>
public class YamlResult : ActionResult
{
/// <summary>
/// Yaml值
/// </summary>
public object Value { get; private set; }
/// <summary>
/// 构造
/// </summary>
/// <param name="value"></param>
public YamlResult(object value)
{
Value = value;
}
/// <summary>
/// Result执行者
/// </summary>
/// <param name="context">上下文</param>
/// <returns></returns>
public override async Task ExecuteResultAsync(ActionContext context)
{
var services = context.HttpContext.RequestServices;
var executor = services.GetRequiredService<IActionResultExecutor<YamlResult>>();
await executor.ExecuteAsync(context, new YamlResult(this));
}
}

YamlResultExecutor.cs

     /// <summary>
/// YamlResult执行者
/// </summary>
/// <typeparam name="T"></typeparam>
public class YamlResultExecutor<T> : IActionResultExecutor<T> where T : YamlResult
{
/// <summary>
/// 执行
/// </summary>
/// <param name="context">上下文</param>
/// <param name="result">值</param>
/// <returns></returns>
public async Task ExecuteAsync(ActionContext context, T result)
{
var serialize = new YamlDotNet.Serialization.Serializer();
var valueString = serialize.Serialize(result.Value);
// 把对象转成yaml字符串,用Response返回
context.HttpContext.Response.ContentType = "Content-Type: text/html; charset=utf-8";
await context.HttpContext.Response.WriteAsync(valueString);
}
}

TestController.cs中调用代码

        [HttpGet]
public IActionResult Get()
{
return new YamlResult(new
{
Data = new { a = , B = "bbb", C = DateTime.Now, d = new string[] { "a", "b", "c" } },
Status = true,
Message = "成功"
});
}

运行结果:

最新文章

  1. Membership基本用法
  2. Win7下Eclipse中文字体太小
  3. C#中判断一个集合是另外一个集合的子集
  4. x3270: PCOM的替代品
  5. javascript高级编程笔记03(正则表达式)
  6. 解决 phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 问题
  7. mapper分页排序指定字段查询模板
  8. hive UDAF开发入门和运行过程详解(转)
  9. 电脑IP地址被占用如何释放?
  10. PMP:11.项目采购管理
  11. unity(2017.3) C# 常用API
  12. python 减少可调用对象的参数个数
  13. HDFS API编程
  14. JavaSE学习总结(三)——Java语言编程练习、格式化字符与常量
  15. chrome google mozilla firefox bookmarks import export
  16. 2017面向对象程序设计(Java)第2周学习指导及要求(2017.8.28-2017.9.3)
  17. AndroidManifest 配置主活动
  18. mpvue上手教程
  19. apt 之 最强技能:【欺骗】,文雅点【偷梁换柱】!
  20. c# list排序的三种实现方式 (转帖)

热门文章

  1. 即时聊天APP(五) - 聊天界面
  2. HTML表格列表简介
  3. C# 代码往oracle数据库添加datetime格式列
  4. jenkins离线安装插件的方法(无法访问外网)
  5. springmvc(二)
  6. mybatis简单入门介绍
  7. 使用apache的poi来实现数据导出到excel的功能——方式一
  8. 并发编程之多线程(Java)
  9. Base64编码有时会默认换行 [转]
  10. 常用Form表单正则表达式