어떻게 Asp.Net 코어 MVC 에서 null 값 의 실현 을 처리 합 니까?

5953 단어 Asp.NetCoreMVCnull
링크
전통 적 인 asp.net mvc 는.net core 의 asp.net core mvc 에 대응 하여 asp.net core mvc 를 이용 하여 크로스 플랫폼 을 구축 할 수 있 고 확장 가능 하 며 고성능 웹 응용 과 api 인 터 페 이 스 를 구축 할 수 있 습 니 다.
프로그래머 들 은 결벽 증 이 있 습 니 다.빈 response 로 돌아 가 는 request 요청 이나 일부 action 에서 null value 로 돌아 가 는 경우,일반적으로 asp.net core mvc 는 http status 204(No Content)로 돌아 갑 니 다.action 에서 null value 로 돌아 가 는 기본 행동 을 수정 하려 고 합 니 다.
이 편 을 실행 하려 면 Visual Studio 2019 를 설치 해 야 합 니 다.설치 되 지 않 으 면 홈 페이지 에 설치 할 수 있 습 니 다https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 또는 로 컬 다운로드https://visualstudio.microsoft.com/downloads/ 
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 방법 을 요청 하면 뮤 직 비디오 는 Http Status 204(No Content)로 돌아 갑 니 다.다음 그림 과 같 습 니 다.

왜 이러 지?response 가 되 돌아 갈 준 비 를 할 때 asp.net core mvc 는 현재 사용 가능 한 포맷 기 목록 에서 현재 response 대상 을 처리 할 적당 한 대상 을 선택 합 니 다.예 를 들 어 이 포맷 기 는 JSon formatter 일 수도 있 고 Xml formatter 일 수도 있 으 며 이 소스 에 적합 한 formatter 일 수도 있 습 니 다.
참,null 값 을 만 났 을 때 asp.net core 뮤 직 비디오 프레임 워 크 는 HttpNoContent OutputFormatter 라 는 이름 을 사용 합 니 다.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;
 }
}
HttpNoContentOutput Formatter 사용 하지 않 기
궁금 하 시 면 HttpNoContentOutputFormatter 를 사용 하지 않 으 셔 도 됩 니 다.asp.net mvc core 에서 null 값 을 처리 하 는 기본 동작 을 차단 합 니 다.이렇게 하려 면 Startup 류 Configure Services 방법 에서 다음 과 같이 설정 하 십시오.

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();
      }
    }
  }
이 필 터 를 action 단계,controller 단계 또는 전역 단계 에 놓 을 수 있 습 니 다.전역 단계 에 놓 으 려 면 Startup 의 Configure Services 방법 에 다음 코드 를 추가 할 수 있 습 니 다.

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc(f =>
  {
    f.Filters.Add(new NotFoundResultFilterAttribute());
  });
}
asp.net core 뮤 직 비디오 를 사용 할 때 action 반환 값 에서 IAction Result 나 Action Result또는 다른 대상 을 사용 할 수 있 습 니 다.Action 에서 데 이 터 를 되 돌려 준 후 프레임 밑 에 서 는 결과 에 대해 필요 한 직렬 화 작업 을 할 수 있 습 니 다.
그러나 action 이 null 값 을 되 돌 릴 때 asp.net core 뮤 직 비디오 는 이 null 값 을 사용 가능 한 직렬 화 기 를 사용 하여 처리 하려 고 하지 않 습 니 다.다시 말 하면 프레임 워 크 는 Http status 204 로 돌아 가 요청 은 성공 적 이지 만 내용 이 없 음 을 표시 합 니 다.다행히도 이 기본 행동 을 변경 할 수 있 습 니 다.
Asp.Net Core MVC 에서 null 값 을 처리 하 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 Asp.Net Core MVC 처리 null 값 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기