Asp。网络中核心的null值如何进行处理

  介绍

今天就跟大家聊聊有关Asp。网络中核心的null值如何进行处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>在Asp。网络中核心新建控制器

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

,,(路线(“api/(控制器)“))   (ApiController)才能   public 才能class  DemoController : ControllerBase   {才能   ,,,readonly  Repository  Repository =, new 库();      ,,,(HttpGet)   ,,,public  ActionResult  ()   ,,,{   ,,,,,string  item =, repository.GetMessage ();   ,,,,,return 好(项);   ,,,}      ,,,(HttpGet (“{id},,, Name =,“Get"))   ,,,public  IActionResult  (int  id)   ,,,{   ,,,,,string  item =, repository.GetMessage ();   ,,,,,return 好(项);   ,,,}   以前,,}

<强>创建一个库

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

, public  class 库   {才能   ,,,public  string  GetMessage ()   ,,,{   ,,,,,return 零;   ,,,}   以前,,}

<强>在asp.net mvc核心中如何处理null值

当用httpGet的方式去请求DemoController的GetMessage方法,mvc会返回Http状态204(无内容),如下图所示:

 Asp。网络中核心的null值如何进行处理

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

对了,当遇到零值时,asp.net mvc核心框架会使用一个叫做HttpNoContentOutputFormatter,它的职责就是将零转换成Http状态204(无内容),下面展示了源码实现:

public  class  HttpNoContentOutputFormatter :, IOutputFormatter   {   ,public  Task  WriteAsync (OutputFormatterWriteContext 上下文)   ,{   ,HttpResponse  response =, context.HttpContext.Response;=,response.ContentLength  0 l;   ,if  (response.StatusCode ==, 200)   ,{   时间=response.StatusCode 才能;204;   ,}   ,return  Task.CompletedTask;   ,}   }

<>强禁用HttpNoContentOutputFormatter

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

services.AddMvc (f =比;   ,{   f.OutputFormatters.RemoveType。才能   ,,(typeof (HttpNoContentOutputFormatter));   ,,f.OutputFormatters.Insert(0,新   HttpNoContentOutputFormatter。才能   ,,{   ,,,,TreatNullValueAsNoContent =false   ,,});   });

上面的代码禁用了http状态204的行为,取而代之的就是返回http状态200 (OK),然后零值会被塞到响应主体中。

<强>在Asp。净核心中返回http状态404

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

,,(路线(“api/(控制器)“))   (ApiController)才能   public 才能class  DemoController : ControllerBase   {才能   ,,,readonly  Repository  Repository =, new 库();   ,,,(HttpGet)   ,,,public  ActionResult  ()   ,,,{   ,,,,,string  item =, repository.GetMessage ();   ,,,,,if  (item ==, null)   ,,,,,,,return  NotFound ();   ,,,,,return 好(项);   ,,,},,,   以前,,}

当你再次请求DemoController时,框架会返回http状态404(未找到),如下面图片所示:

 Asp。网络中核心的null值如何进行处理

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

一个更好的返回http状态404的方式是使滤波器用行动或者结果过滤,如下代码:

,, public  class  NotFoundActionFilterAttribute :, ActionFilterAttribute   {才能   ,,,public  override  void  OnActionExecuted (ActionExecutedContext 上下文)   ,,,{   ,,,,,if  (context.Result  is  ObjectResult)   ,,,,,{   null   null   null   null   null   null   null   null   null   null   null   null   null

Asp。网络中核心的null值如何进行处理