예제 #1
0
        // See: https://docs.microsoft.com/en-us/nuget/api/package-publish-resource#push-a-package
        public async Task Upload(CancellationToken cancellationToken)
        {
            if (_options.Value.IsReadOnlyMode || !await _authentication.AuthenticateAsync(Request.GetApiKey()))
            {
                HttpContext.Response.StatusCode = 401;
                return;
            }

            try
            {
                using (var uploadStream = await Request.GetUploadStreamOrNullAsync(cancellationToken))
                {
                    if (uploadStream == null)
                    {
                        HttpContext.Response.StatusCode = 400;
                        return;
                    }

                    var result = await _indexer.IndexAsync(uploadStream, cancellationToken);

                    switch (result)
                    {
                    case SymbolIndexingResult.InvalidSymbolPackage:
                        HttpContext.Response.StatusCode = 400;
                        break;

                    case SymbolIndexingResult.PackageNotFound:
                        HttpContext.Response.StatusCode = 404;
                        break;

                    case SymbolIndexingResult.Success:
                        HttpContext.Response.StatusCode = 201;
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Exception thrown during symbol upload");

                HttpContext.Response.StatusCode = 500;
            }
        }
        public async Task Upload([FromServices] IPackageContext packageContext, CancellationToken cancellationToken)
        {
            try
            {
                using var uploadStream = await Request.GetUploadStreamOrNullAsync(cancellationToken);

                if (uploadStream == null)
                {
                    HttpContext.Response.StatusCode = 400;
                    return;
                }

                var result = await _indexer.IndexAsync(uploadStream, cancellationToken);

                switch (result.Status)
                {
                case SymbolIndexingStatus.InvalidSymbolPackage:
                    HttpContext.Response.StatusCode = 400;
                    break;

                case SymbolIndexingStatus.PackageNotFound:
                    HttpContext.Response.StatusCode = 404;
                    break;

                case SymbolIndexingStatus.Success:
                    HttpContext.Response.StatusCode = 201;
                    packageContext.PackageId        = result.PackageId;
                    packageContext.PackageVersion   = result.PackageVersion;
                    break;
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Exception thrown during symbol upload");

                HttpContext.Response.StatusCode = 500;
            }
        }