今天就跟大家聊聊有关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.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(未找到),如下面图片所示:
<强>一个更完善的的返回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 nullAsp。网络中核心的null值如何进行处理