2015-02-06 6 views
1

나는 아주 간단한 실수를했다. Fiddler에서 POST를 만들었습니다. "FileFullpath"에서 두 개의 백 슬래시 대신 하나의 백 슬래시를 사용했습니다.컨트롤러 POST 메서드에 매개 변수로 Null 전달

Fiddler POST

내 웹 API 모델은 다음과 같이 정의된다 ...

public class GTMetadataModel 
{ 
    public int Id { get; set; } 

    public string ComputerId { get; set; } 
    public string UserId { get; set; } 
    public string FileFullpath { get; set; } 

    public string Version { get; set; } 
    public string[] Categories { get; set; } 
    public double[] Scores { get; set; } 
} 

내 웹 API 컨트롤러가 다음과 같이 정의된다 ...

public HttpResponseMessage PostGTMetadata(GTMetadataModel newentry) 
{ 
    ... // handle null parameter and return error here. 
    var response = Request.CreateResponse<GTMetadataModel>(HttpStatusCode.Created, newentry); 
    return response; 
} 

내가 웹을 실행 API를 보내서 Fiddler POST를 보내면 "newentry"가 null입니다. 두 개의 백 슬래시가 필요하다는 것을 깨닫기까지 약간의 시간이 걸렸습니다. 나는 그것을 2로 바꾼 다음 "신입학"이 옳았다.

분명히이 문제는 잘못된 데이터가 제공되었지만 서버 측 코드에서 어디서 어떻게 나쁜 Json 데이터를 감지 할 수 있습니까?

업데이트 : 마크의 대답이 접수되었습니다. 참조 된 게시물은 견고하고 우아한 접근 방식의 좋은 예입니다. 그러나 단순한 대답을 원하는 사람들을 위해 참조 된 게시물은 "this.ModelState"를 사용하여 구문 분석 된 데이터의 문제점을 식별합니다. 나는 포스트 핸들러 메소드에 다음 코드를 추가 할 수있다.

+0

, 질문을 참조하십시오. newentry가 null이 아니며 유효성 검사를 수행하기 전에 유효성 검사를 통과하는지 확인할 수 있어야합니다. –

+0

여기 누군가가 RexEx를 사용하여 만든 것입니다. - http://stackoverflow.com/questions/25209757/how-can-i-detect-invalid-json-containing-a-trailing-comma-with-c – MethodMan

+0

@DavidL - 예 , 나는 그것이 null임을 발견했다. 그러나 newentry는 이미 Web API 프레임 워크에서 파싱 중이며 아마도 실패 할 것입니다 (null을 전달하기 위해). 나는 거기에서 실패를 감지하고 싶다, 또는 적어도 그것의 오류 평가에 접근한다. – Les

답변

0

잘못된 요청을 가로 채기 위해 작업 필터를 사용할 수 있습니다.

즉시 Validating parameters in ASP.NET Web API model binder

+0

@ 나는 이것을 대답으로 표시하고 있습니다. 솔루션이 마음에 들지만 답변의 요지를 제공하기 위해 내 질문을 업데이트했습니다 (예 : ModelState 사용). – Les

관련 문제