返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >如何在Asp.Net Core MVC中处理null值的实现
  • 531
分享到

如何在Asp.Net Core MVC中处理null值的实现

ASP.NETcorenullMVCASPnet 2022-06-07 22:06:05 531人浏览 八月长安
摘要

译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-

译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html

传统的 asp.net mvc 对应着 .netcore 中的 ASP.net core mvc,可以利用 asp.net core mvc 去构建跨平台,可扩展,高性能的WEB应用和 api 接口。

程序员都有一些洁癖,很多时候我们都想很完美的包装一些错误信息,如一些返回空response的request请求,或者一些 action 中返回 null value 的情况,通常这些情况下,asp.Net Core mvc 都会返回 Http status 204 (No Content),在本篇中,我准备修改一下这种从 action 返回 null value 的默认行为。

要想运行本篇的例子,你需要安装一下 Visual Studio 2019,如果没有安装,可以到官网安装一下:https://visualstudio.microsoft.com/downloads/ 或者本地下载 https://www.jb51.net/softs/618313.html 

在 Asp.NET Core 中新建 Controller

在解决方案窗口中的 Controller 文件夹上右键并选择 Add -> Controller 去新建Controller,指定这个 Controller 的名字为 DemoController,接下来用下面的代码替换 DemoController。


  [Route("api/[controller]")]
  [ApiController]
  public class DemoController : ControllerBase
  {
    readonly Repository repository = new Repository();
    [HttpGet]
    public ActionResult Get()
    {
      string item = repository.GetMessage();
      return Ok(item);
    }
    [HttpGet("{id}", Name = "Get")]
    public IActionResult Get(int id)
    {
      string item = repository.GetMessage();
      return Ok(item);
    }
  }

创建一个 Repository

下面是一个 Repository 类,里面包含了一个返回 null 的 GetMessage 方法,当然这仅仅是为了演示目的。


  public class Repository
  {
    public string GetMessage()
    {
      return null;
    }
  }

在 asp.net core mvc 中如何处理 null 值

当用 httpGet 的方式去请求 DemoController 的 GetMessage 方法,mvc 会返回 Http Status 204 (No Content),如下图所示:

为什么会这样呢?当response准备返回时,asp.net core mvc 会从当前可用的 格式化器 列表中选择一个合适的去处理当前的 response 对象,比如说:这个格式化器可以是 JSON fORMatter,又可以是 Xml formatter,或者任何合适于该资源的 formatter。

对了,当遇到 null 值时,asp.net core mvc 框架会使用一个叫做 HttpNoContentOutputFormatter,它的职责就是将 null 转换成 Http Status 204(No Content),下面展示了源码实现:


public class HttpNoContentOutputFormatter : IOutputFormatter
{
 public Task WriteAsync(OutputFormatterWriteContext context)
 {
 HttpResponse response = context.HttpContext.Response;
 response.ContentLength = 0L;
 if (response.StatusCode == 200)
 {
  response.StatusCode = 204;
 }
 return Task.CompletedTask;
 }
}

禁用 HttpNoContentOutputFormatter

如果你好奇的话,可以把 HttpNoContentOutputFormatter 禁用掉,这样就切断了 asp.net mvc core 处理 null 值的默认行为,如果要这么做的话,在 Startup 类的 ConfigureServices 方法做如下配置。


services.AddMvc(f =>
 {
   f.OutputFormatters.RemoveType
   (typeof(HttpNoContentOutputFormatter));
   f.OutputFormatters.Insert(0, new
   HttpNoContentOutputFormatter
   {
     TreatNullValueAsNoContent = false
   });
});

上面的代码禁用了 http status 204 的行为,取而代之的就是返回 http status 200 (OK),然后 null 值会被塞到 response body 中。

在 Asp.Net Core 中返回 http status 404

为了能够达到404的效果,我来更新一下 action 的名字,下面就是 DemoController 更新后的代码片段:


  [Route("api/[controller]")]
  [ApiController]
  public class DemoController : ControllerBase
  {
    readonly Repository repository = new Repository();
    [HttpGet]
    public ActionResult Get()
    {
      string item = repository.GetMessage();
      if (item == null)
        return NotFound();
      return Ok(item);
    }   
  }

当你再次请求 DemoController 时,框架会返回 http status 404(Not Found),如下面图片所示:

一个更完善的的返回 http 404 的方式

一个更好的返回 http status 404 的方式是使用 action filter 或者 result filter,如下代码:


  public class NotFoundActionFilterAttribute : ActionFilterAttribute
  {
    public override void OnActionExecuted(ActionExecutedContext context)
    {
      if (context.Result is ObjectResult)
      {
        ObjectResult objectResult = context.Result
        as ObjectResult;
        if (objectResult.Value == null)
          context.Result = new NotFoundResult();
      }
    }
  }

你可以将这个 filter 放置在 action级别,controller级别 或者 全局级别,如果你要放到全局级别,可以在 Startup 的 ConfigureServices 方法中新增如下代码:


public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc(f =>
  {
    f.Filters.Add(new NotFoundResultFilterAttribute());
  });
}

当在使用 asp.net core mvc 时,你可以在 action 返回值处使用 IActionResult或 ActionResult<T> 或其他任何对象,在 Action 返回数据后,框架底层会对你的返回结果做必要的 序列化操作。

然而,当 action 返回 null 值时, asp.net core mvc 并不会尝试用任何可用的序列化器去处理这个 null 值,换句话说,框架会返回 Http status 204,表示请求成功但无内容,幸运的是,你可以按需改变这个默认的行为。

到此这篇关于如何在Asp.Net Core MVC中处理null值的实现的文章就介绍到这了,更多相关Asp.Net Core MVC处理null值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文章:ASP.NET Core Mvc中空返回值的处理方法详解


--结束END--

本文标题: 如何在Asp.Net Core MVC中处理null值的实现

本文链接: https://lsjlt.com/news/30798.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在Asp.Net Core MVC中处理null值的实现
    译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-...
    99+
    2022-06-07
    ASP.NET core null MVC ASP net
  • 在SQL中该如何处理NULL值
    在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 小伙伴想精准查找自己想看的MySQL文章?喏 → M...
    99+
    2024-04-02
  • 如何在 ASP.NET Core Web API 中处理 Patch 请求
    目录一、概述二、将 Keys 保存在 Input Model 中三、定义 ModelBinderFactory 和 ModelBinder四、在 ASP.NET Core 项目中替换...
    99+
    2023-05-20
    ASP.NET Core Web API 处理 Patch 请求 ASP.NET Core  Patch 请求
  • 如何处理MySQL中的NULL值
    在MySQL中,可以使用以下方法处理NULL值: 检查NULL值:使用IS NULL或IS NOT NULL操作符来检查NULL值...
    99+
    2024-04-09
    MySQL
  • MySQL中如何处理NULL值
    在MySQL中,可以使用以下方式处理NULL值: 使用IS NULL和IS NOT NULL操作符来判断NULL值: SELEC...
    99+
    2024-03-06
    MySQL
  • ASP.NET Core MVC 中实现中英文切换的示例代码
      哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.NET Core框架中给我们提供了全球化的类,叫...
    99+
    2022-06-07
    net 示例 ASP.NET MVC core ASP
  • ASP.NET Core MVC如何实现运行时动态定义Controller类型
    昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller...
    99+
    2022-06-07
    net ASP.NET 运行 MVC core 动态 ASP
  • 详解如何在ASP.Net Core中实现健康检查
    健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态。 ASP.Net Cor...
    99+
    2024-04-02
  • 如何理解ASP.NET MVC 中的Web Pages
    今天就跟大家聊聊有关如何理解ASP.NET MVC 中的Web Pages,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。I:Web Pages 1.0中以“_”开头的特别文件(文件命...
    99+
    2023-06-17
  • Kotlin语言中是如何处理null值的
    Kotlin语言中是如何处理null值的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Kotlin null的处理详解NullPointerException,...
    99+
    2023-05-31
    kotlin null
  • 如何理解ASP.NET MVC 3 Beta中的Chart
    这篇文章给大家介绍如何理解ASP.NET MVC 3 Beta中的Chart,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。小编将介绍Chart的使用。包括Chart数据源的配置、Chart的显示、Chart保存三个方面...
    99+
    2023-06-17
  • 在 ASP.NET Core Web API 中处理Patch请求的方法
    今天小编给大家分享的是在 ASP.NET Core Web API 中处理Patch请求的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收...
    99+
    2023-07-06
  • ASP.NET Core中如何实现重定向详解
    前言 ASP.NET Core 是一个跨平台,开源的,轻量级的,模块化的,用于构建高性能的 web 开发框架, ASP.NET Core MVC 内置了多种方式将一个 requ...
    99+
    2022-06-07
    重定向 ASP.NET net core ASP
  • 在 SQL 语句中处理 NULL 值的方法
    在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USE...
    99+
    2024-04-02
  • ASP.NET Core MVC 修改视图的默认路径及其实现原理解析
    本章将和大家分享如何在ASP.NET Core MVC中修改视图的默认路径,以及它的实现原理。 导语:在日常工作过程中你可能会遇到这样的一种需求,就是在访问同一个页面时PC端和移动端...
    99+
    2024-04-02
  • spring-mvc中如何实现映射处理器
    这篇文章主要介绍spring-mvc中如何实现映射处理器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.简析映射处理器在spring mvc中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了...
    99+
    2023-06-17
  • asp.net Core中如何实现同名服务注册
    这篇文章主要为大家展示了“asp.net Core中如何实现同名服务注册”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“asp.net Core中如何实现同名服务注册”这篇文章...
    99+
    2023-06-29
  • 如何在ASP.NET Core 的任意类中注入Configuration
    目录遇到的问题解决方案总结遇到的问题 我已经通读了 MSDN 上关于 Configuration 的相关内容,文档说可实现在 application 的任意位置访问 Configur...
    99+
    2024-04-02
  • springboot中如何利用fastjson处理返回值为null的属性值
    本篇内容主要讲解“springboot中如何利用fastjson处理返回值为null的属性值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot中如何利用fastjson处理返回值...
    99+
    2023-06-08
  • ASP.NET Core和NumPy:如何在分布式系统中实现协同工作?
    随着分布式系统的发展,协同工作已经成为了一个必不可少的功能。ASP.NET Core和NumPy是两个非常强大的工具,它们可以帮助我们实现分布式系统中的协同工作。在本文中,我们将介绍如何使用ASP.NET Core和NumPy来实现分布式...
    99+
    2023-10-02
    numy 存储 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作