zoukankan      html  css  js  c++  java
  • 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代码如下:

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

    首先引用一个三方包

    PM> Install-Package YamlDotNet

    YamlResult.cs

     1     /// <summary>
     2     /// YamlResul
     3     /// </summary>
     4     public class YamlResult : ActionResult
     5     {
     6         /// <summary>
     7         /// Yaml值
     8         /// </summary>
     9         public object Value { get; private set; }
    10         /// <summary>
    11         /// 构造
    12         /// </summary>
    13         /// <param name="value"></param>
    14         public YamlResult(object value)
    15         {
    16             Value = value;
    17         }
    18         /// <summary>
    19         /// Result执行者
    20         /// </summary>
    21         /// <param name="context">上下文</param>
    22         /// <returns></returns>
    23         public override async Task ExecuteResultAsync(ActionContext context)
    24         {
    25             var services = context.HttpContext.RequestServices;
    26             var executor = services.GetRequiredService<IActionResultExecutor<YamlResult>>();
    27             await executor.ExecuteAsync(context, new YamlResult(this));
    28         }
    29     }

    YamlResultExecutor.cs

     1     /// <summary>
     2     /// YamlResult执行者
     3     /// </summary>
     4     /// <typeparam name="T"></typeparam>
     5     public class YamlResultExecutor<T> : IActionResultExecutor<T> where T : YamlResult
     6     {
     7         /// <summary>
     8         /// 执行
     9         /// </summary>
    10         /// <param name="context">上下文</param>
    11         /// <param name="result"></param>
    12         /// <returns></returns>
    13         public async Task ExecuteAsync(ActionContext context, T result)
    14         {
    15             var serialize = new YamlDotNet.Serialization.Serializer();
    16             var valueString = serialize.Serialize(result.Value);
    17             // 把对象转成yaml字符串,用Response返回
    18             context.HttpContext.Response.ContentType = "Content-Type: text/html; charset=utf-8";
    19             await context.HttpContext.Response.WriteAsync(valueString);
    20         }
    21     }

    TestController.cs中调用代码

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

    运行结果:

  • 相关阅读:
    php遍历目录
    PHP处理一个5G文件,使用内存512M的,数据为整形,从大到小排序,优化排序算法
    百钱买百鸡问题 php版本
    青蛙跳100级台阶算法,完整可运行,php版本
    网站如何整体换角度
    SOA架构设计(转发)
    一些稍微复杂点的sql语句
    php变量和数组大小限制
    uploadify中文开发文档,解决php多图上传
    mysql索引的一些知识
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/11736248.html
Copyright © 2011-2022 走看看