programing

"Increct Content-Type:" 예외는 각도 mvc 6 응용 프로그램을 던집니다.

stoneblock 2023. 10. 31. 20:25

"Increct Content-Type:" 예외는 각도 mvc 6 응용 프로그램을 던집니다.

asp.net , mvc6, angularjs를 사용하는 어플리케이션을 개발하고 있습니다.작업 방법에 대한 요청을 하면 전달된 데이터가 없습니다.요청을 확인했을 때 다음과 같은 예외가 발생했습니다.

  • 양식 '(Microsoft).AspNet.Http. 내부.DefaultHttpRequest)이것입니다.요청).Form'이(가) 'System' 유형의 예외를 던졌습니다.잘못된 작업'예외' 마이크로소프트.AspNet.Http.IformCollection {System.잘못된 작업예외}

예외 메시지 다음과"Incorrect Content-Type:application/json;charset=UTF-8"

나의 각고의 봉사

return $http({ method: 'POST', url: 'home/createEvent', eventDetails: event })
                .success(function(data, status, headers, config) {
                    return data;
                })
                .catch(function(data, status, headers, config) {
                    console.log(data);
                });

내가 조종하는

[HttpPost]
public IActionResult CreateEvent([FromBody]Event eventDetails)
{
    return Json(new {dsd=""},
        new JsonSerializerSettings {ContractResolver = new CamelCasePropertyNamesContractResolver()});

}

그 대답은 제게 통하지 않았습니다.저에게 해결책은 $http 호출에 헤더를 추가하는 것이었습니다.

        $http({
                url: "/install",
                method: "POST",
                data: data,
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded"
                }
            })
            .success(...);

다음 예시가 도움이 되기를 바랍니다.

컨트롤러를 다음으로 장식해 보십시오.

[Produces("application/json")]
[Route("api/[controller]")]

컨트롤러 이름이 표시되지 않았으므로 가상의 전체 작동 예를 들어 보겠습니다.

콘트롤러

[Produces("application/json")]
[Route("api/[controller]")]    
public class DashBoardLayoutApi : Controller
{
    public DashBoardLayoutApi()
    { }

    [HttpPost]
    public void Post([FromBody] LoginViewModel data)
    { }
}

C# 뷰 모델

public class LoginViewModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

HTML/JS

<script>
    var data = {
        Email: 'Test',
        Password: 'Test',
        RememberMe: true
    };

    $("#test").click(function() {
        $.ajax({
            url: '/api/DashBoardLayoutApi',
            type: 'POST',
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(data),                   
        });
    }
</script>
<button id="test"> Save Layout</button>

결과.

enter image description here enter image description here

저 같은 경우에는, 추가하는 것.[Produces("application/json")]아무것도 하지 않았지만, 추가했습니다.[FromBody]매개변수의 속성은 트릭을 수행한 것입니다!

숨겨진 사람의 대답은 훌륭합니다.그러나 애플리케이션에 hidden의 접근 방식을 구현한 후에도 C# 컨트롤러에는 모델이 비어 있었습니다.조금 둘러본 결과 JS 코드로 작성된 잘못된 클라이언트 모델에 문제가 있어 서버에서 병렬화할 수 없습니다(null은 guid 유형으로 변환할 수 없습니다).

어떤 이유로 모델 바인더는 다음과 같은 경우에 예외를 두지 않습니다. https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

매개 변수가 바인딩되면 모델 바인딩이 해당 이름의 값을 찾는 것을 중지하고 다음 매개 변수를 바인딩합니다.바인딩이 실패하면 MVC에서 오류가 발생하지 않습니다.모델 상태를 확인하여 모델 상태 오류를 조회할 수 있습니다.유효한 속성입니다.

모델 상태를 확인합니다.유효한 모델을 통과했는지 확인하기 위해 C# 컨트롤러에 유효한 속성이 있으며 모델 바인딩 오류를 잡아 기록하기 위해 사용자 지정 모델 바인더를 사용하는 것을 고려할 수 있습니다.

언급URL : https://stackoverflow.com/questions/33711629/incorrect-content-type-exception-throws-angular-mvc-6-application