实现ActionFilterAttribute OnActionExecuted方法 封装 NormalResponseModel
执行 会说无法将NormalResponseModel 转化成string
但是如果返回值 是int 或者list等类型会正常返回,也看了一些源码还是没有找到问题
如果把返回值包装成 OK(xx) 返回类型设置Iactionresult 不会异常
string list int 都会转化成Objectresult. string是否特殊 ?
试试 ActionResult<T>
public ActionResult<string> Get(int id)
{
return "Hello World";
}
这个是可以的我试过,只是很奇怪 为什么 int 可以 而string不可以
因为再做统一返回值 希望即使开发人员返回的是string类型也可以统一格式返回,
@narojay: 建议看一下当返回值是 string 时,context.Result 的具体类型是什么?
@dudu:
返回值是sting的时候
返回值是int的时候
@dudu:
貌似 返回值是int的时候 选择了JsonOutputFormatter
返回string的时候选择了stringoutputformatter
这里有强制换换 把NormalResponseModel转化成了string 转换不了
我其实想用JsonOutputFormatter的
@narojay: 是否可以提供重现这个问题的示例代码?
@dudu: 可以的 ,我把这部分代码拉到个人仓库
@dudu: https://github.com/hjsjy/NarojayBlog.git
运行 value 第一个是string 返回值 第二个 第三个是 int返回值
@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: 牛批!!
这下 统一返回值基本可以了。。