public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { EnsureArg.IsNotNull(context, nameof(context)); IDicomRequestContext dicomRequestContext = _dicomRequestContextAccessor.RequestContext; RouteData routeData = context.RouteData; var routeName = context.ActionDescriptor?.AttributeRouteInfo?.Name; var routeContainsPartition = routeData.Values.TryGetValue(KnownActionParameterNames.PartitionName, out object value); if (!_isPartitionEnabled && routeContainsPartition) { throw new DataPartitionsFeatureDisabledException(); } if (_isPartitionEnabled && !routeContainsPartition) { throw new DataPartitionsMissingPartitionException(); } if (_isPartitionEnabled) { var partitionName = value?.ToString(); PartitionNameValidator.Validate(partitionName); var partitionResponse = await _mediator.GetPartitionAsync(partitionName); if (partitionResponse?.PartitionEntry != null) { dicomRequestContext.DataPartitionEntry = partitionResponse.PartitionEntry; } // Only for STOW, we create partition based on the request. // For all other requests, we validate whether it exists and process based on the result else if (_storeRouteNames.Contains(routeName)) { var response = await _mediator.AddPartitionAsync(partitionName); dicomRequestContext.DataPartitionEntry = response.PartitionEntry; } else { throw new DataPartitionsNotFoundException(partitionName); } } await base.OnActionExecutionAsync(context, next); }
[InlineData("0123456789012345678901234567890123456789012345678901234567890123456789")] // value is too long public void GivenInValidPartitionId_WhenValidating_ThenShoulFail(string value) { Assert.Throws <InvalidPartitionNameException>(() => PartitionNameValidator.Validate(value)); }
public void GivenValidPartitionId_WhenValidating_ThenShouldPass(string value) { PartitionNameValidator.Validate(value); }