public static int GetPartitionKey(this IDicomRequestContext dicomRequestContext) { EnsureArg.IsNotNull(dicomRequestContext, nameof(dicomRequestContext)); var partitionKey = dicomRequestContext.DataPartitionEntry?.PartitionKey; EnsureArg.IsTrue(partitionKey.HasValue, nameof(partitionKey)); return(partitionKey.Value); }
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); }
public override void OnActionExecuting(ActionExecutingContext context) { EnsureArg.IsNotNull(context, nameof(context)); IDicomRequestContext dicomRequestContext = _dicomRequestContextAccessor.DicomRequestContext; dicomRequestContext.RouteName = context.ActionDescriptor?.AttributeRouteInfo?.Name; // Set StudyInstanceUid, SeriesInstanceUid, and SopInstanceUid based on the route data RouteData routeData = context.RouteData; if (routeData?.Values != null) { // Try to get StudyInstanceUid if (routeData.Values.TryGetValue(KnownActionParameterNames.StudyInstanceUid, out object studyInstanceUid)) { dicomRequestContext.StudyInstanceUid = studyInstanceUid.ToString(); // Try to get SeriesInstanceUid only if StudyInstanceUid was successfully fetched. if (routeData.Values.TryGetValue(KnownActionParameterNames.SeriesInstanceUid, out object seriesInstanceUid)) { dicomRequestContext.SeriesInstanceUid = seriesInstanceUid.ToString(); // Try to get SopInstanceUid only if StudyInstanceUid and SeriesInstanceUid were fetched successfully. if (routeData.Values.TryGetValue(KnownActionParameterNames.SopInstanceUid, out object sopInstanceUid)) { dicomRequestContext.SopInstanceUid = sopInstanceUid.ToString(); } } } } if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) { dicomRequestContext.AuditEventType = _auditEventTypeMapping.GetAuditEventType( controllerActionDescriptor.ControllerName, controllerActionDescriptor.ActionName); } base.OnActionExecuting(context); }