.NET 5를 사용한 게으른 일요일
저도 배우고 싶은 것이 몇 가지 있었는데, 두 마리... 한 돌:
가장 먼저 한 일은 명령줄에서 새 .NET Core 프로젝트를 시작하는 것이었습니다.
> dotnet new web
Visual Studio Code를 열면 최소한의 ASP.NET Core 프로젝트가 있다는 것을 알 수 있습니다. Startup.cs를 완전히 삭제했습니다. Program.cs를 열고 모든 것을 다시 삭제했습니다. 기본 사항부터 시작했습니다.
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults()
.Start();
using 문을 추가해야 했지만 이제 완전히 활성화된 프로젝트가 생겼습니다(아무것도 하지 않았지만 404를 반환함).
using Microsoft.AspNetCore.Hosting;
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults()
.Start();
실제 작업을 처리하기 위해 LinkManager라는 간단한 클래스를 만들었습니다. 하지만 제대로 작동하려면 Startup.cs에서 일반적으로 수행하는 많은 작업을 수동으로 구성해야 했습니다(이는 사용자가 수행해야 하는 작업이 아니라 내가 수행한 작업일 뿐입니다).
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(bldr =>
{
bldr.ConfigureServices(svc =>
{
svc.AddTransient<LinkManager>();
});
bldr.Configure(app =>
{
app.Run(async context =>
{
var manager = app.ApplicationServices.GetService<LinkManager>();
await manager.HandleRedirection(context);
});
});
})
.Start();
이렇게 작은 것치고는 좋았습니다. 이 시점에서 Visual Studio Code는 프로젝트를 정말 잘 수행하고 있었습니다. Visual Studio로 갈 이유가 전혀 없었지만 곧 도착할 것입니다...
HandleRedirection 내에서 요청된 경로가 유효한 리디렉션인지 검색하고 그렇다면 리디렉션을 설정합니다.
public async Task HandleRedirection(HttpContext ctx)
{
try
{
var redirect = await FindRedirect(ctx.Request.Path);
if (redirect is not null)
{
ctx.Response.Redirect(redirect);
return;
}
}
catch (Exception ex)
{
_logger.LogError("Exception during finding short link", ex);
}
}
실패한 링크가 404 또는 500만 반환한다는 생각이 싫었습니다. 그래서 이를 처리하기 위해 웹 페이지가 필요하다고 결정했습니다. 하지만 무엇을 해야 할까요? Razor Pages 또는 MVC(또는 다른 프레임워크)를 도입해야 합니까?
대신 페이지를 제공하기로 결정했습니다.
ctx.Response.ContentType = "text/html";
var page = await File.ReadAllTextAsync(
Path.Combine(_env.ContentRootPath, "index.html"));
await ctx.Response.WriteAsync(page);
한 페이지만 제공하고 있었기 때문에 괜찮았습니다. 여기에는 동적 코드가 없습니다. index.html 페이지로 리디렉션할 수 있었지만 대신 URL이 보존되도록 제공했습니다. 한 가지 메모는 내가 로컬 CSS 파일을 사용하고 있다는 것입니다. 그래서 이를 처리하기 위해 StaticFiles를 선택했습니다.
bldr.Configure(app =>
{
app.UseStaticFiles();
app.Run(async context =>
{
var manager = app.ApplicationServices.GetService<LinkManager>();
await manager.HandleRedirection(context);
});
});
쉬운 완두콩!
마지막으로 Cosmos Table Storage를 사용하는 것입니다. 설정 방법에 대해서는 자세히 설명하지 않겠지만 코드의 핵심(설정되면)은 키를 기반으로 특정 행을 검색하는 것입니다. 테이블에는 짧은 URL과 최종 목적지만 있습니다.
var op = TableOperation.Retrieve<LinkEntity>(PARTITIONKEY, key);
var result = await _table.ExecuteAsync(op);
var link = result.Result as LinkEntity;
if (link != null)
{
if (linkCache is null) linkCache = new Dictionary<string, string>();
linkCache[key] = link.Link;
_cache.Set(LINKCACHE, linkCache, DateTimeOffset.Now.AddMinutes(60));
_logger.LogInformation("Added Key to Cache");
return link.Link;
}
Cosmos에 실제로 연결하는 방법을 확인하려면 코드를 자유롭게 살펴보세요. 매우 간단합니다.
마지막 부분은 Azure에 배포하는 것이었습니다. 짧은 시리즈here에서 이에 대해 자세히 다루었지만 이 과정에서 흥미로운 점은 배포할 Docker 이미지를 생성해야 한다는 점이었습니다.
방금 Dockerfile을 추가하고 손으로 코딩할 수 있었지만 게을렀습니다. 이것은 Visual Studio에서 프로젝트를 다시 여는 순간이었습니다. 그래서 놀랍도록 쉬운 "Docker 지원"을 사용하여 이미지를 만들 수 있었습니다.
그런 다음 Azure 마법을 설정하기만 하면 작동이 시작되었습니다!
알아두세요, 저는 게으릅니다. 따라서 Azure 도구(Azure Storage Explorer 또는 Portal)를 사용하여 항목을 수동으로 추가하여 코드에 관리 기능이 전혀 없도록 합니다. 보안 및 여러 양식을 처리해야 하므로 결국 처리해야 할 수도 있지만 지금은 게으른 접근 방식을 사용할 수 있습니다.
여기에서 시도해 볼 수 있습니다.
궁금하시면 코드는 다음 위치에 있습니다.
그래, 아마 그 위에 새 쇼트너를 사용했어야 했어.
Shawn Wildermuth의 이 저작물은 Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License에 따라 라이선스가 부여되었습니다.
wildermuth.com의 작업을 기반으로 합니다.
이 기사가 마음에 들면 Pluralsight에서 Shawn의 과정을 참조하십시오.
Reference
이 문제에 관하여(.NET 5를 사용한 게으른 일요일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shawnwildermuth/lazy-sunday-with-net-5-58m4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)