/// <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; }
/// <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); } }
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); } }
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); } }
/// <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);
/// <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); }
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); } }
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); } }
/// <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; }
public PublishedItemHandler(RequestDelegate next, Application app, LaraOptions options) : base(next) { _options = options; _app = app; }