Я преобразую веб-приложение. NET Framework 4.8, построенное на основе Generi c Обработчики, в веб-приложение. NET Core 3.1.
Я ищу способ каждый из моих пользовательских классов страниц мог автоматически регистрировать себя в качестве конечной точки на этапе запуска. Сейчас это ручной процесс, который я хотел бы упростить.
Это то, с чем я работаю до сих пор.
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.FileProviders;
namespace App
{
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseStaticFiles(StaticFolder("/Resources"));
app.UseStaticFiles(StaticFolder("/Clients"));
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", Page<Default>);
endpoints.MapGet("/Login.ashx", Page<Login>);
endpoints.MapPost("/LoginPostBack.ashx", Page<LoginPostBack>);
endpoints.MapGet("/Logout.ashx", Page<Logout>);
endpoints.MapPost("/LogoutPostBack.ashx", Page<LogoutPostBack>);
endpoints.MapGet("/Clients/", Page<Clients.Default>);
endpoints.MapPost("/Clients/", Page<Clients.DefaultPostBack>);
endpoints.MapGet("/Clients/Add.ashx", Page<Clients.Add>);
endpoints.MapPost("/Clients/AddPostBack.ashx", Page<Clients.AddPostBack>);
endpoints.MapGet("/Clients/Modify.ashx", Page<Clients.Modify>);
endpoints.MapPost("/Clients/ModifyPostBack.ashx", Page<Clients.ModifyPostBack>);
endpoints.MapGet("/Clients/Delete.ashx", Page<Clients.Delete>);
endpoints.MapPost("/Clients/DeletePostBack.ashx", Page<Clients.DeletePostBack>);
});
}
private async Task Page<T>(HttpContext context) where T : new()
{
T page = new T();
await ((IPage)page).ProcessRequest(context);
}
private StaticFileOptions StaticFolder(string path)
{
return new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), path.Substring(1))),
RequestPath = path
};
}
}
}
Ниже приведен пример пользовательского класса страницы:
using System.Web;
namespace App
{
public class Default : FormPage
{
protected override void PreProcess()
{
Page.Icon = "far fa-home";
Page.Title = "Home";
}
protected override void Process()
{
Write(@"<div class=""row mb-4"">");
Write(@"<div class=""col-12"">");
Write(@"<h5>Home</h5>");
Write(@"</div>");
Write(@"</div>");
}
}
}