2017-09-06 39 views
0

モデルの状態に基づいて、コードが繰り返し実行されるアクションの多くでプロパティの検証時にカスタム例外をスローする必要があります。特定のアクションパラメータを検証するときにカスタム例外をスローする

これはどのようにリファクタリングできますか?現在のコードの

[HttpGet("{jobId}/employeeLog")] 
public async Task<IActionResult> GetFileLog(Guid jobId, 
    [FromQuery] Guid employeeId, 
    [SkipAndTopFromQuery] int? skip, 
    [SkipAndTopFromQuery] int? top, 
    [FromHeader(Name = "X-Correlation-ID")] string correlationId) 
{ 
    var employeeIdToValidate = ModelState["employeeId"]; 
    var jobIdToValidate = ModelState["jobId"]; 
    if (employeeIdToValidate == null || employeeIdToValidate != null && employeeIdToValidate.Errors.Any()) 
     throw new InvalidFileIdException(); 
    if (jobIdToValidate == null || jobIdToValidate != null && jobIdToValidate.Errors.Any()) 
     throw new InvalidApplicationIdException(); 
    if (!ModelState.IsValid) 
     return StatusCode((int)HttpStatusCode.BadRequest); 

    .... 
} 

答えて

1

あなた if文を簡素化したい場合は、あなたにModelStateが同じオブジェクト、またはオブジェクトを返す場合、あなたはまた、Null Propagation Operator in C#

public async Task<IActionResult> GetFileLog(Guid jobId, 
    [FromQuery] Guid employeeId, 
    [SkipAndTopFromQuery] int? skip, 
    [SkipAndTopFromQuery] int? top, 
    [FromHeader(Name = "X-Correlation-ID")] string correlationId) 
{ 
    var employeeIdToValidate = ModelState["employeeId"]; 
    var jobIdToValidate = ModelState["jobId"]; 

    if (employeeIdToValidate?.Errors?.Any() ?? true) 
     throw new InvalidFileIdException(); 

    if (jobIdToValidate?.Errors?.Any() ?? true) 
     throw new InvalidApplicationIdException(); 

    if (!ModelState.IsValid) 
     return StatusCode((int)HttpStatusCode.BadRequest); 

    .... 
} 

を使用することができます一般的なインターフェースでは、チェックをいくつかの方法に移すことができます。

class GetFileLogValidatior: ValidatorBase { 

    public override void Validate(GetFileLogValidatiorContext context) { 

     var employeeIdToValidate = context.EmployeeIdToValidate; 
     var jobIdToValidate = context.JobIdToValidate; 

     if (employeeIdToValidate?.Errors?.Any() ?? true) 
      throw new InvalidFileIdException(); 

     if (jobIdToValidate?.Errors?.Any() ?? true) 
      throw new InvalidApplicationIdException(); 
    } 

} 
:ところで

、あなたはバリのようにクラスのいくつかの並べ替えを作成することによって、あなたの方法から、あなたの検証を分割することができます

関連する問題