2016-06-10 1 views
2

나는 웹 API 2.2 (C#을)하는 방법에 대한웹 API에 대한 형식 변환에 기본 오류 메시지를 교체 2.2

입력에서 만든 RESTful 서비스는 다음과 같습니다있다 모델 검증은 제 정규 표현식보다 수행되므로

어떤 경우
[Required] 
    [RegularExpression(@"^[0-9\.]*$", ErrorMessage = "ProductId must be an integer")] 
    public int ProductId { get; set; } 

은, 내가 생각하는 대신 내 기본 오류 메시지가 나타납니다 : 객체에는 다음과 같은 속성이 있습니다 유효성 검사. 예를 들어

:

  "productId": helloworld, 

반환 :

{ 
"message": "The request is invalid." 
"modelState": { 
"paymentInput.productId": [2] 
0: "Unexpected character encountered while parsing value: v. Path 'productId', line 6, position 30." 
    - 
}- 
} 

다음과 같은 경우 :

  "productId": "helloworld", 

이 같은를 반환합니다.

그래서, 내 질문은 :

가 어떻게이 메시지를 변경할 수 있습니다

?

미리 감사 및 종류

+0

정규식은 문자열이 아닌 정수에서만 유효하기 때문에'RegularExpression' 속성은 아무 것도하지 않습니다. 입력은 모델에 할당되기 전에 구문 분석됩니다. 호출자에게 사용자 지정 메시지를 반환하도록 입력을 검증하려면 int를 문자열로 변환하고 int로 구문 분석 된 값을 반환하는 메서드를 모델에 추가하십시오. – Igor

답변

1
public class PaymentInput { 
    // [Required] //removed Required unless you want a different message if nothing is provided 
    [RegularExpression(@"^[0-9\.]+$", ErrorMessage = "ProductId must be an integer")] 
    // changed regex to + instead of * which forces it to have at least 1 passed in character 
    public string ProductId { get; set; } 

    public int GetProductId() { return int.Parse(ProductId); } 
} 
  • 이 변경 사항은 사용자가 제품 ID에 아무것도 통과 할 수 있습니다.
  • ProductId 값에서 정규 표현식을 실행할 수 있습니다.
  • RegularExpression 특성의 오류 메시지를 반환 할 수 있습니다. 내가 추가하고 싶습니다

유일한 것은 이것이다, 당신은 메시지를 변경에 대한 걱정해야 하는가?

제 의견으로는 메시지가 매우 분명합니다. productId에 숫자가 아닌 것을 전달하지 마십시오. 이것이 발생하지 않도록 클라이언트가 검증을 수행해야합니다. 그런 다음 클라이언트가 생성 한 사용자에게 친숙한 오류 메시지를 표시합니다.개인적으로 나는 웹 API가 친숙한 오류 메시지를 전달하도록하려고하지 않을 것이고, PITA 플러스 지역화는 어느 것이 든 (다른 언어로 된 메시지와) 관련되어야하는 것이 아닙니다. 또한 들어오는 모든 매개 변수를 문자열 유형으로 변경 한 다음 코드에서 유효성 검사를 수행하고 각각에 대해 사용자 정의 오류 메시지를 반환해야합니다. 아마에 가장 좋은 것입니다 한마디로

: 그대로

  • 에 서버 코드를 남겨주세요, 그것은 그 일을하고있다. 또한 서버에서 수행해야하는 코딩이 적다는 것을 의미합니다.
  • 클라이언트가 서버에 메시지를 보내기 전에 어느 정도 입력이 유효한지 확인하십시오. 이것이 외부 API 인 경우, 인터페이스 작성시 호출자가 사용할 수있는 API 문서 또는 문서를 작성하십시오.
  • 클라이언트에서 예외 및 메시지를 처리하십시오.
+0

Igor 감사합니다. 내 관심사는 보안에 관한 것입니다. 이것은 노출 방법입니다. –

1

내가 오류 MSG가 그것 때문에 값

을 구문 분석하는 동안 발생하는 모든

예기치 않은 캐릭터라고 생각 안부, 제품 ID 유형은 INT는 시스템 있도록이다 먼저 JSON 값을 int로 구문 분석 한 다음 사용자가 올린 모든 유효성 검증을 지정합니다. 파싱하는 동안 실패하기 때문에 다른 검증 작업도 수행 할 필요가 없습니다.

ProductID 유형을 string으로 변경하면 정규 표현식 유효성 검사가 올바른 형식의 입력 문자열의 유효성을 검사하는 것으로 생각합니다. 정규식은 정수가 아닌 문자열에서 실행됩니다.

관련 문제