Beispiel #1
0
        public async Task <object> Any(CreateNotebook request)
        {
            if (string.IsNullOrEmpty(request.Lang))
            {
                throw new ArgumentNullException(nameof(request.Lang));
            }
            if (string.IsNullOrEmpty(request.Slug))
            {
                throw new ArgumentNullException(nameof(request.Slug));
            }

            var baseUrl = request.Slug;

            if (baseUrl.IndexOf("://", StringComparison.Ordinal) == -1)
            {
                if (baseUrl.StartsWith("http.") || baseUrl.StartsWith("https."))
                {
                    baseUrl = baseUrl.LeftPart('.') + "://" + baseUrl.RightPart('.');
                }
                else
                {
                    baseUrl = "https://" + baseUrl;
                }
            }

            var requestDto = request.Request;
            var lang       = LangInfoUtils.AssertLangInfo(request.Lang);
            var notebook   = await Sites.CreateNotebookAsync(lang, baseUrl, request.IncludeTypes, requestDto, request.Args);

            var suffix = requestDto ?? (request.IncludeTypes != null
                ? request.IncludeTypes.Replace("{", "").Replace("}", "").Replace(".", "").Replace("*", "").Replace(",", "-")
                : "");
            var fileName = request.Name ??
                           baseUrl.RightPart("://").LeftPart('/').SafeVarRef() +
                           (string.IsNullOrEmpty(suffix) ? "" : "-" + suffix);

            if (!fileName.EndsWith(".ipynb"))
            {
                fileName += ".ipynb";
            }

            var json = notebook.ToJson().IndentJson();

            return(new HttpResult(json, "application/x-ipynb+json")
            {
                Headers =
                {
                    [HttpHeaders.ContentDisposition] =
                        $"attachment; {HttpExt.GetDispositionFileName(fileName)}; size={json.Length}; modification-date={DateTime.UtcNow.ToString("R").Replace(",", "")}"
                }
            });
        }
Beispiel #2
0
        public void Register(IAppHost appHost)
        {
            //Register the 'text/csv' content-type and serializers (format is inferred from the last part of the content-type)
            appHost.ContentTypes.Register(MimeTypes.Csv,
                                          SerializeToStream, CsvSerializer.DeserializeFromStream);

            //Add a response filter to add a 'Content-Disposition' header so browsers treat it natively as a .csv file
            appHost.GlobalResponseFilters.Add((req, res, dto) =>
            {
                if (req.ResponseContentType == MimeTypes.Csv)
                {
                    var fileName = req.OperationName + ".csv";
                    res.AddHeader(HttpHeaders.ContentDisposition, $"attachment;{HttpExt.GetDispositionFileName(fileName)}");
                }
            });
        }