当前位置:   article > 正文

.Net Core下自定义JsonResult_net core jsonresult

net core jsonresult

自定义JsonResult其实就是利用了过滤器来实现的,过滤器的概念其实跟.net framework中差不多,不明白的可以去补习下相关知识点。

为什么要自定义JsonResult呢,因为mvc 要把json序列化都通过Newtonsoft来实现,之前在.net framework也是这么来操作的,因为.net自带的序列化方法对日期格式显示并不是我们要的格式,当然也可以用其他方法来实现如自定义日期格式

这边要特别说明下,之前在.net framework中如果HttpGet返回JsonResult时需要加上JsonRequestBehavior.AllowGet这么一句话,而在.net core下没有此方法了,那我们要返回JsonResult怎么办呢,就直接加上特性[HttpPost]行了。

这也正是自定义JsonResult时跟之前.net framework时不同的地方

方法,自定义NewJsonResult继承JsonResult 然后重写ExecuteResult方法

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Web;
  6. using Microsoft.AspNetCore.Http;
  7. //using System.Web.Mvc;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Newtonsoft.Json;
  10. using System.Text;
  11. namespace MyMis.MvcHelper {
  12. public class NewJsonResult:JsonResult {
  13. public NewJsonResult(object value)
  14. :base(value){
  15. }
  16. public override void ExecuteResult(ActionContext context) {
  17. if (context == null) {
  18. throw new ArgumentException("序列化内容不能为null");
  19. }
  20. if (context.HttpContext == null || context.HttpContext.Response == null) {
  21. return;
  22. }
  23. context.HttpContext.Response.ContentType = string.IsNullOrEmpty(ContentType) ? "application/json" : ContentType;
  24. //context.HttpContext.Response.ContentEncoding = ContentEncoding == null ? System.Text.Encoding.UTF8 : ContentEncoding;
  25. if (Value != null) {
  26. context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(Value));
  27. }
  28. }
  29. }
  30. }

将此方法加入自定义的ActionFilter中,自定义MyJsonActionFilter对OnActionExecuted进行自定义下调用上面的NewJsonResult来对JsonResult进行处理进行输出

  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.AspNetCore.Mvc.Filters;
  3. using MyMis.MvcHelper;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. namespace MyMis.Web.Filter
  9. {
  10. public class MyJsonActionFilter : Attribute, IActionFilter {
  11. public void OnActionExecuted(ActionExecutedContext context) {
  12. //Console.WriteLine("结束执行此操作");
  13. if (context.Result is JsonResult && !(context.Result is NewJsonResult)) {
  14. JsonResult jResult = (JsonResult)context.Result;
  15. NewJsonResult result = new NewJsonResult(jResult.Value) { Value = jResult.Value, SerializerSettings= jResult.SerializerSettings, ContentType = jResult.ContentType };
  16. context.Result = result;
  17. }
  18. }
  19. public void OnActionExecuting(ActionExecutingContext context) {
  20. Console.WriteLine("开始执行此操作");
  21. }
  22. }
  23. }

最后我们要全局注册下就直接在Startup文件中的ConfigureServices方法里进行注册下

  1. services.AddMvc(m=> {
  2. //注册到集合的第一个
  3. m.ModelBinderProviders.Insert(0, new ModelBinderProvider());
  4. //注册过滤器
  5. m.Filters.Add(typeof(MyJsonActionFilter));
  6. m.Filters.Add(typeof(CustomerExceptionFilter));
  7. });

这样,我们在Action中调用Json方法时就会用自定义的NewJsonResult方法来进行处理了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/586756
推荐阅读
相关标签
  

闽ICP备14008679号