首页新闻找找看学习计划

.net core 统一返回值 返回类型string 异常

0
悬赏园豆:10 [已解决问题] 解决于 2019-12-26 18:06

实现ActionFilterAttribute OnActionExecuted方法 封装 NormalResponseModel


执行 会说无法将NormalResponseModel 转化成string

但是如果返回值 是int 或者list等类型会正常返回,也看了一些源码还是没有找到问题
如果把返回值包装成 OK(xx) 返回类型设置Iactionresult 不会异常
string list int 都会转化成Objectresult. string是否特殊 ?

narojay的主页 narojay | 初学一级 | 园豆:81
提问于:2019-12-26 16:15
< >
分享
最佳答案
1

试试 ActionResult<T>

public ActionResult<string> Get(int id)
{
    return "Hello World";
}
收获园豆:10
dudu | 高人七级 |园豆:39077 | 2019-12-26 16:22

这个是可以的我试过,只是很奇怪 为什么 int 可以 而string不可以

因为再做统一返回值 希望即使开发人员返回的是string类型也可以统一格式返回,

narojay | 园豆:81 (初学一级) | 2019-12-26 16:28

@narojay: 建议看一下当返回值是 string 时,context.Result 的具体类型是什么?

dudu | 园豆:39077 (高人七级) | 2019-12-26 17:01

@dudu:
返回值是sting的时候

返回值是int的时候

narojay | 园豆:81 (初学一级) | 2019-12-26 17:06

@dudu:
貌似 返回值是int的时候 选择了JsonOutputFormatter
返回string的时候选择了stringoutputformatter

这里有强制换换 把NormalResponseModel转化成了string 转换不了
我其实想用JsonOutputFormatter的

narojay | 园豆:81 (初学一级) | 2019-12-26 17:11

@narojay: 是否可以提供重现这个问题的示例代码?

dudu | 园豆:39077 (高人七级) | 2019-12-26 17:14

@dudu: 可以的 ,我把这部分代码拉到个人仓库

narojay | 园豆:81 (初学一级) | 2019-12-26 17:19

@dudu: https://github.com/hjsjy/NarojayBlog.git
运行 value 第一个是string 返回值 第二个 第三个是 int返回值

narojay | 园豆:81 (初学一级) | 2019-12-26 17:35

@narojay: 你被原有的 ObjectResult 带进了死胡同,跳出来就能解决问题, ActionResult 任你用

case ObjectResult objectResult:
    var responseModel = new NormalResponseModel(code: context?.HttpContext?.Response?.StatusCode, data: objectResult?.Value);
    context.Result = new JsonResult(responseModel);
    break;
dudu | 园豆:39077 (高人七级) | 2019-12-26 17:53

@dudu: 牛批!!

narojay | 园豆:81 (初学一级) | 2019-12-26 18:01

这下 统一返回值基本可以了。。

narojay | 园豆:81 (初学一级) | 2019-12-26 18:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册