コード例 #1
0
        public async Task Invoke(OicContext context)
        {
            var resourceContext = new ResourceRepositoryContext(context, _options, _resourceRepository);

            if (!resourceContext.ValidatePath())
            {
                await _next(context);

                return;
            }

            OicResponse result;
            var         request = resourceContext.GetSubRequest();

            IOicResource requestResource = null;

            if (request.ContentType != OicMessageContentType.None)
            {
                if (request.Content == null)
                {
                    context.Response = OicResponseUtility.CreateMessage(OicResponseCode.BadRequest, "Content type provided with no content");
                    return;
                }

                var r = _oicConfiguration.Serialiser.Deserialise(request.Content, request.ContentType);

                if (r is OicResourceList list)
                {
                    // TODO: verify grabbing the first resource is okay and enumeration is not needed.
                    requestResource = list.First();
                }
                else
                {
                    requestResource = r as IOicResource;
                }
            }

            if (request.Operation == OicRequestOperation.Get)
            {
                result = await _resourceRepository.RetrieveAsync(request);
            }
            else if (request.Operation == OicRequestOperation.Post)
            {
                result = await _resourceRepository.CreateOrUpdateAsync(request, requestResource);
            }
            else if (request.Operation == OicRequestOperation.Put)
            {
                result = await _resourceRepository.CreateAsync(request, requestResource);
            }
            else if (request.Operation == OicRequestOperation.Delete)
            {
                result = await _resourceRepository.DeleteAsync(request);
            }
            else
            {
                result = OicResponseUtility.CreateMessage(OicResponseCode.BadRequest, "Bad request");
            }

            if (result.ResposeCode == OicResponseCode.NotFound)
            {
                await _next(context);

                return;
            }

            context.Response = result;
        }
コード例 #2
0
 public Task <OicResponse> CreateOrUpdateAsync(OicRequest request, IOicResource resource)
 {
     return(_resourceRepository.CreateOrUpdateAsync(request, resource));
 }