asp.net core mvc中自定义ActionResult
在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们。
项目名称:Asp.NetCoreExperiment
项目地址:https://github.com/axzxs2001/Asp.NetCoreExperiment
asp.net core mvc的模板中返回前端时可以用IActionResult的子类,来区分不同的返回内容,那怎么来实现自定义的ActionResult呢?
github代码如下:
首先引用一个三方包
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的更多相关文章
- ASP.NET Core MVC 中自定义视图
ASP.NET Core MVC 中的视图发现 ASP.NET Core MVC 中有提供了几个 View()的重载方法. 如果我们使用下面提供 View()的重载方法,它将查找与 Action 方法 ...
- 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 ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...
- ASP.NET Core MVC 中设置全局异常处理方式
在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...
- 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 ...
- 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. ...
- ASP.NET Core MVC中的 [Required]与[BindRequired]
在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...
- ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
随机推荐
- python语言程序设计部分习题
第二章 python程序实例解析 程序练习题 2.1 实例1的修改,采用eval(input(<提示内容>))替换现有输入部分,并使输出的温度值为整数. vv 2.2 汇率兑换程序.按 ...
- MOOC web前端开发笔记(一)
网站和网页 网站 互联网上用于展示特定内容的相关网页的集合. 网页 网站中的一页,一个网站中的网页通过"超链接"的方式被组织在一起. 主页 进入网站看到的第一个网页,主页的文件名通 ...
- pathlib模块
一.pathlib库官方定义 pathlib 是Python内置库,Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径).path ...
- SpringBoot集成Shiro 实现动态加载权限
一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .ur ...
- word2vec之tensorflow(skip-gram)实现
关于word2vec的理解,推荐文章https://www.cnblogs.com/guoyaohua/p/9240336.html 代码参考https://github.com/eecrazy/wo ...
- .Net Reactor混淆导致匿名类处理出现的问题处理分析
.Net Reactor 是一款比较不错的混淆工具,比VS自带的那个好用很多,一直以来也陪伴着我们的成长,虽然没有完美的混淆工具,不过也算还是不错的,至少能在一定程度上对DLL进行一定的保护处理. 不 ...
- Skeleton with Assimp 骨骼动画解析
Skeleton with Assimp 骨骼动画解析 骨骼动画是图形学中十分常见应用很广泛的一个技术,也是比较基础的内容,作为图形学的工程师需要将这一部分内容梳理清晰,主要关键在于几点:第一,分清楚 ...
- Mybatis的xml文件对大于号小于号的特殊处理!
当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序 ...
- SpringBoot进阶教程(六十二)整合Kafka
在上一篇文章<Linux安装Kafka>中,已经介绍了如何在Linux安装Kafka,以及Kafka的启动/关闭和创建发话题并产生消息和消费消息.这篇文章就介绍介绍SpringBoot整合 ...
- VisualStudio自定义调试工具(GIS)
闲言 偶尔分享技术,对,这次就是偶尔,几年一次(技术自卑).上周末竟然有人催更,也是受宠...若惊.以后会主动定期更的,可能. 前言 Visual Studio 调试器自带很多调试工具,调 ...