コード例 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LaraMiddleware"/> class.
 /// </summary>
 /// <param name="next">The next middleware</param>
 /// <param name="app">Lara application</param>
 /// <param name="options">Configuration options</param>
 public LaraMiddleware(RequestDelegate next, Application app, LaraOptions options)
 {
     options = options ?? throw new ArgumentNullException(nameof(options));
     next    = new ClientLibraryHandler(next).Invoke;
     next    = new PublishedItemHandler(next, app, options).Invoke;
     next    = new DiscardHandler(app, next).Invoke;
     next    = new KeepAliveHandler(app, next).Invoke;
     _next   = new PostEventHandler(app, next).Invoke;
 }
コード例 #2
0
 /// <summary>
 /// Public method used by the Lara framework
 /// </summary>
 /// <param name="app">Lara application</param>
 /// <param name="http">Http context</param>
 /// <param name="options">Lara options</param>
 /// <returns>Task</returns>
 public async Task Run(Application app, HttpContext http, LaraOptions options)
 {
     http = http ?? throw new ArgumentNullException(nameof(http));
     if (IsMatchETag(http.Request.Headers))
     {
         SendMatchStatus(http);
     }
     else
     {
         await SendContent(http);
     }
 }
コード例 #3
0
        public async Task Run(Application app, HttpContext http, LaraOptions options)
        {
            var context = new WebServiceContext(app, http)
            {
                RequestBody = await MiddlewareCommon.ReadBody(http).ConfigureAwait(false)
            };
            var handler = Factory();
            var data    = Array.Empty <byte>();

            if (await MiddlewareCommon.RunHandler(http, async() =>
            {
                data = await handler.Execute();
            }).ConfigureAwait(false))
            {
                await SendReply(context, data);
            }
        }
コード例 #4
0
        public async Task Run(Application app, HttpContext http, LaraOptions options)
        {
            var connection = GetConnection(app, http);
            var execution  = new PageContext(app, http, connection);
            var page       = CreateInstance();
            var document   = connection.CreateDocument(page, app.KeepAliveInterval);

            execution.DocumentInternal = document;
            if (await RunPage(app, http, page, options).ConfigureAwait(false))
            {
                await ProcessGetResult(http, document, execution, StatusCode);
            }
            if (document.CanDiscard)
            {
                await connection.Discard(document.VirtualId);
            }
        }
コード例 #5
0
 /// <summary>
 /// Use the Lara Web Engine.
 /// </summary>
 /// <param name="app">The application.</param>
 /// <param name="options">The options.</param>
 /// <returns>app in parameters</returns>
 public static IApplicationBuilder UseLara(this IApplicationBuilder app, LaraOptions options)
 => UseLara(app, LaraUI.DefaultApplication, options);
コード例 #6
0
 /// <summary>
 /// Use the Lara Web Engine.
 /// </summary>
 /// <param name="app">The application.</param>
 /// <param name="laraApp">Lara application</param>
 /// <param name="options">The options.</param>
 /// <returns>app in parameters</returns>
 public static IApplicationBuilder UseLara(this IApplicationBuilder app, Application laraApp, LaraOptions options)
 {
     app     = app ?? throw new ArgumentNullException(nameof(app));
     laraApp = laraApp ?? throw new ArgumentNullException(nameof(laraApp));
     options = options ?? throw new ArgumentNullException(nameof(options));
     laraApp.CreateModeController(options.Mode);
     if (options.PublishAssembliesOnStart)
     {
         laraApp.PublishAssemblies();
     }
     if (options.AllowLocalhostOnly || laraApp.AllowLocalhostOnly)
     {
         app.UseMiddleware <LocalhostFilter>();
     }
     if (options.AddWebSocketsMiddleware)
     {
         app.UseWebSockets();
     }
     app.UseMiddleware <LaraMiddleware>(laraApp, options);
     if (options.ShowNotFoundPage)
     {
         app.UseMiddleware <NotFoundMiddleware>(laraApp, options);
     }
     return(app);
 }
コード例 #7
0
 private static async Task ReplyStatusCodeError(Application app, HttpContext http, StatusCodeException status, LaraOptions options)
 {
     if (app.ErrorPages.TryGetPage(status.StatusCode, out var page))
     {
         await page.Run(app, http, options);
     }
     else
     {
         await MiddlewareCommon.SendStatusReply(http, status.StatusCode, status.Message);
     }
 }
コード例 #8
0
        internal static async Task <bool> RunPage(Application app, HttpContext http, IPage page, LaraOptions options)
        {
            try
            {
                await page.OnGet();

                return(true);
            }
            catch (StatusCodeException status)
            {
                await ReplyStatusCodeError(app, http, status, options);

                return(false);
            }
        }
コード例 #9
0
ファイル: NotFoundMiddleware.cs プロジェクト: okhosting/lara
 /// <summary>
 /// Creates an instance of NotFoundMiddleware
 /// </summary>
 /// <param name="next">Next middleware</param>
 /// <param name="app">Lara application</param>
 /// <param name="options">Configuration options</param>
 // ReSharper disable once UnusedParameter.Local
 public NotFoundMiddleware(RequestDelegate next, Application app, LaraOptions options)
 {
     _options = options;
     _app     = app;
 }
コード例 #10
0
 public PublishedItemHandler(RequestDelegate next, Application app, LaraOptions options) : base(next)
 {
     _options = options;
     _app     = app;
 }