在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 = "成功"
});
}

运行结果:

asp.net core mvc中自定义ActionResult的更多相关文章

  1. ASP.NET Core MVC 中自定义视图

    ASP.NET Core MVC 中的视图发现 ASP.NET Core MVC 中有提供了几个 View()的重载方法. 如果我们使用下面提供 View()的重载方法,它将查找与 Action 方法 ...

  2. 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

    Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing vi ...

  3. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...

  4. ASP.NET Core MVC 中设置全局异常处理方式

    在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...

  5. 006.Adding a controller to a ASP.NET Core MVC app with Visual Studio -- 【在asp.net core mvc 中添加一个控制器】

    Adding a controller to a ASP.NET Core MVC app with Visual Studio 在asp.net core mvc 中添加一个控制器 2017-2-2 ...

  6. 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】

    Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...

  7. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...

  8. ASP.NET Core MVC中构建Web API

    在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...

  9. 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行

    我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...

随机推荐

  1. 一步步到IOC

    一段代码 class Program { static void Main(string[] args) { var shop=new Shop(); shop.Add(); shop.Delete( ...

  2. MySQL索引&&开发规范

    规范总结 索引规范 默认添加的索引都是BTree索引.Innodb只支持BTree索引. 设计索引原则 - 最适合索引的列是WHERE子句中的列,而不是SELECT中的列. - 如果索引的字段很长,使 ...

  3. Day 14 查找文件 find

    find 查找方式 1.按照名称进行查找 [root@oldboyedu ~]# find ./ -name "*eth0" 2.按照名称查找(不区分大小写) [root@oldb ...

  4. 14 (OC)* UIView和UILayer

    总接来说就是如下几点: 1:每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供.两者都有树状层级结构,layer ...

  5. .Net WCF服务部署IIS详细解析

    官方解析:Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通 ...

  6. python9

    v> 软件测试 广州博才科技开发有限公司 迅捷PDF编辑器 3.5 集合 学习目标: 1. 能够说出如何创建集合 2. 能够说出字典和集合的区别 3. 能够说出如何向集合中添加元素 4. 能够说 ...

  7. lvm创建逻辑卷技巧

    公司使用的服务器都是虚拟机,是虚拟机管理员通过模板创建的. 创建的所有逻辑卷都是使用的sda盘. 而我们在部署应用时需要和系统所在盘分离.(提高磁盘读写速度,避免系统盘被占满) 以前都是先创建新的逻辑 ...

  8. vue中关于滚动条的那点事

    vue中关于滚动条的那点事 不知道你有没有遇到过这种情况,有时当页面切换时,滚动条不在页面的顶端.最近半路加入一个项目,就遇到这种情况.(若只是为了解决此问题,可直接翻到最下方)下面谈谈解决此问题的过 ...

  9. 调试 内存查看StringCchCopy的运行前后

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int _tmain(int argc, _T ...

  10. mysql 最左前缀匹配原则

    1.在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例:对列col1.列col2和列col3建一个联合索引 KEY index_col1_co ...