>

ASP.NET Core 2.1에서는 기본적으로이 질문에 반대되는 현상이 나타납니다. MVC 컨트롤러에 JSON 객체를 전달할 때 string.empty가 null로 변환 됨

내가 JSON 를 보낼 때  빈 문자열을 가진 속성을 가진 컨트롤러로 다시 개체를 가져 오면 더 이상 자동으로 null 로 변환되지 않습니다. .

예를 들어 다음 JS 객체를 사용하십시오.

var person = {firstName:"", lastName:""}; 
        $http.post("/app/index", person)
            .then(function (response) {
                // Success
            }, function (error) {
                // Failure
            })

컨트롤러에서 모델에 바인딩되면 빈 문자열이있는 속성은 빈 문자열로 남습니다.

   //
    // POST: /App
    [HttpPost]
    public async Task<ActionResult> Index([FromBody] AppFormDTO data)
    {
       ....
    }

이 객체를 데이터베이스에 저장할 때 null 를 선호합니다  빈 문자열 대신 값을 사용합니다.

그들이 DefaultModelBinder 를 바 꾸었습니까   ASP.NET Core 2.1 ? 그렇다면 어떻게 MVC5의 상태로 다시 변경합니까?  자동으로 string.empty 로 변환되었습니다 ?

null 를 추가하려면

업데이트  참조 용 모델 :

AppFormDTO

public class AppFormDTO { public string firstName{ get; set; } public string lastName{ get; set; } }

  • 답변 # 1

    json 객체에 빈 문자열이 아닌 null 속성이 null인지 확인하십시오 ...

  • 답변 # 2

    firstName/lastName에 대한 PERSON 모델에 이것을 추가하십시오 :

    [DisplayFormat(ConvertEmptyStringToNull = false)]
    ... the model values
    
    

  • 답변 # 3

    ASP.NET Core의 소스 코드 따라 가기

    if (bindingContext.ModelType == typeof(string))
     {
          // Already have a string. No further conversion required but handle ConvertEmptyStringToNull.
          if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && string.IsNullOrWhiteSpace(value))
          {
               model = null;
          }
          else
          {
               model = value;
          }
     }
    
    

    기본적으로 동작은 빈 문자열로 null로 설정됩니다. 모델 AppFormDTO 를 다시 확인  당신이 ConvertEmptyStringToNull = false 를 넣어 경우  맞지 않습니다.

  • 이전 php - 라 라벨은 MySQL 로그인 정보를받지 않습니다
  • 다음 matlab - 필드 값을 기준으로 필드를 추출하는 방법