0

액션 메소드에 내 경로 템플릿은 뭔가 다음과 같다 :오류 메시지 2

[Route("{select:bool=false}")] 

및 방법 서명이 공공 INT getMethod 메소드 (부울 선택) {}

입니다 질문 1 :

다음 URL을 사용하여 위의 엔드 포인트를 소비합니다. 나는 부울 매개 변수에 문자열 값을 전달하고

http://localhost/api/controller?select=lskdfj

나는 다음과 같은 응답을 얻을 :

{ 
"Message": "The request is invalid.", 
"MessageDetail": "The parameters dictionary contains a null entry for parameter 'select' of non-nullable type 'System.Boolean' for method 'int GetMethod(Boolean)' in '**ProjectName.Controllers.ControllerName**'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter." 
} 

대신에 프로젝트 이름을 보여주는 컨트롤러 이름 위 또한 우리의 코드의 자세한 사항이며, 메시지에 세부 정보가 있습니다. 소비자/고객에게 맞춤 메시지를 표시하고 싶습니다.

할 방법이 있습니까?

질문 2 :

나는 다음과 같은 URL을 사용하여 엔드 포인트 이상 소모하고있다. 잘못된 매개 변수 이름을 지정하여 전달 중입니다.

http://localhost/api/controller? selt = true

오류를 발생시키지 않고 오류를 throw하는 대신 select의 기본값 인 false를 사용합니다.

제공되는 매개 변수 (selt)가 잘못되었다는 오류 메시지를 클라이언트에 던지는 방법은 무엇입니까? 대신 우리의 코드의 자세한 사항이며, 또한 위의 메시지가 자세한 내용을 프로젝트 이름, 컨트롤러 이름을 보여주는

답변

0

, 나는 소비자/클라이언트에 일부 사용자 정의 메시지를 보여주고 싶다.

당신이 코드의 세부 사항을 숨기려면, 당신은 단지 이런 Global.asax.cs 파일의 구성을 수정할 수 있습니다 1

옵션 :

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = 
    IncludeErrorDetailPolicy.Never; // Or Local 

옵션 2

메시지를 사용자 지정하려면 처리 파이프 라인에 "연결"해야합니다 e 문을 나가기 전에 응답을 변경하십시오. 그렇게하려면 Custom Message Handler을 만들어야합니다.

public class CustomMessageHandler : DelegatingHandler 
{ 
    protected async override Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     // Call the inner handler. 
     var response = await base.SendAsync(request, cancellationToken); 
     if (response.StatusCode == System.Net.HttpStatusCode.BadRequest && 
      request.RequestUri.ToString().Contains("getmethod")) 
     { 
      HttpError error = null; 
      if (response.TryGetContentValue(out error)) 
      { 
       // Modify the message details 
       error.MessageDetail = "Something customized."; 
      } 
     } 
     return response; 
    } 
} 

WebApiConfig에 위의 메시지 핸들러를 등록 : 여기 빨리 당신을 위해 함께 넣어 무언가이다.이 코드 줄을 추가하여 CS는 :

config.MessageHandlers.Add(new CustomMessageHandler()); 

지금 당신은 당신의 사용자 정의 메시지를 대신 표시됩니다.

+0

고맙습니다. @ 코딩 요시. 옵션 1의 경우 : 내부 디버깅 목적으로 오류 메시지를 기록하지만 클라이언트에 표시하지 않는 방법이 있습니까? – Vicky

+0

@vicky 예. '로컬'을 사용하면 사이트가 배포 된 동일한 컴퓨터에서 로컬로 요청한 정보 만 세부 정보를 볼 수 있습니다. – CodingYoshi