ASP.NET Core로 웹 사이트를 제작 후 테스트는 IIS Express로 로컬에서 서버를 올려서 진행하게 된다.만약 해당 웹 사이트를 모바일과 같은 로컬이 아닌 외부 기기에서 접근해야 한다면 아이피를 이용해야한다.(로컬 pc와 동일한 네트워크망을 사용한다는 가정하에) 아래 순서에 따라 셋팅을 해주면 외부 기기에서 로컬에서 올린 서버로 내부 아이피를 이용해 접근할 수 있다. 1. applicationhost.config 파일 수정- 솔루션 폴더\.vs\프로젝트명\config\applicationhost.config 파일 실행- 해당 파일은 xml로 구성되어 있는데, 태그의 name 속성이 프로젝트명으로 되어있는 태그로 이동- 태그의 하위로 있는 태그의 bindingInformation 속성 값 ..
Mac, iOS, Android, Linux, Windows 등등.. 우리는 수 많은 OS가 존재하는 세상에서 살고 있다. 당연하게도, 내가 만든 Appliccation이 최대한 다양한 환경에서 돌아갈 수 있었으면 좋겠다. Flutter, Xamarin, MAUI, Electron, ReactNative 등등.. 멀티 플랫폼을 지원하게 하기위한 기술들이 쏟아져 나오고 있다. 지금은 바야흐로 대 멀티 플랫폼의 시대. 수 많은 선택지 중 Blazor + Electron.NET을 이용해보기로 하였다. (이미 Blazor를 이용한 웹앱을 만들어 본 경험이 있기 때문) [ 사전 준비 ] 1. Blazor 웹앱을 만드는 방법은 공식문서에 다양한 튜토리얼이 있으므로, 그 과정은 생략함. 2. Blazor WebAss..
Google의 서비스를 이용하기 위해 OAuth를 연동하는 법은 많이 나와 있지만.. Blazor Server에 적용하는 법은 자료가 많이 없다. 정답을 찾기보다는 OAuth 매커니즘 자체를 이해하고, Google의 라이브러리가 지원하는지를 확인하는 게 빠르다. OAuth는 표준기술이기 때문에 큰 맥락의 매커니즘은 동일하다. 하지만 이 글에서는 Google OAuth2를 기준으로 설명한다. 먼저, 간략한 프로세스는 아래와 같다. 특정 앱에 대한 접근 권한과 식별을 위해 ClientID와 ClientSecret 취득 OAuth 서버에 ClientID와 ClientSecret으로 Code 취득 Code와 ClientSecret으로 실제 인증과 권한 획득에 사용할 AccessToken과 RefreshToken..
Blazor는 SPA에서의 url로 인한 라우팅을 지원한다. 이는 NavigationManager의 NavigateTo 함수를 사용하면 된다. 예를 들어, index 페이지에서 login 페이지로 라우팅을 해야 하는 상황을 가정해보자. index.razor 파일에 아래와 같은 코드가 작성될 것이다. [Inject] private NavigationManager NavigationManager { get; set; } NavigationManager.NavigateTo("/login"); 그리고 디버깅을 해보면, 아래와 같은 프로세스를 예상한다. https://localhost:포트/index 이동 NavigateTo 함수 호출 Blazor의 라우터가 경로를 해석하여 페이지 전환 https://localh..
로그인이 안되어 있을 시 로그인 페이지를 제외한 모든 페이지의 접근을 로그인 페이지로 redirect를 시켜버리는 방법이다. _Import.razor 에 아래와 같은 속성을 추가한다. 보통 해당 속성은 인증이 필요한 페이지에 추가하지만, 이러면 모든 페이지 접근 시 인증 권한이 있는지 체크하게 된다. @attribute [Authorize] 로그인 페이지에는 아래와 같이 권한을 체크하지 않는 속성을 추가한다. @attribute [AllowAnonymous] 마지막으로, App.razor에 로그인이 안되어 있을 시 로그인 페이지로 redirect 시키는 처리를 한다. CascadingAuthenticationState : 로그인 상태를 모든 위치에서 공유함 AuthorizeRouteView : 기존 Ro..
서로 다른 두 객체간 이름이 같은 Property의 값을 복사하는 방법. Reflection을 이용하여 각 Property의 이름을 취득하고, 값을 Set 해준다. 원본 객체의 특정 Property이름을 제외하고 복사할 수 있다. /// /// source 오브젝트에서 result 오브젝트로 Property의 값을 복사해준다. /// /// 원본 /// 대상 /// 제외할 Property 목록 public static void CopyProperties(object source, object result, string[] ignorePropertyFilter) { PropertyInfo[] sourceProperties = source.GetType().GetProperties(); PropertyInf..
app.manifest 파일에서 requireAdministrator 권한을 주면 프로그램을 구동 시 관리자 권한으로 실행할지 묻는창이 뜬다. 하지만 만약 ClickOnce를 통해 배포하게 되면 해당 방법을 이용할 수 없다. ClickOnce는 AppData에 설치되기 때문에 원천적으로 관리자 권한을 부여할 수 없기 때문이다. (위 설정으로 ClickOnce 배포 시 에러 발생함) 그러면 이러한 상황에서 사용자가 프로그램을 관리자 권한으로 실행하게 하려면 어떻게 해야할까? 배포되는 프로그램을 일반 권한으로 실행하되, Program.cs에서 CMD를 이용해 관리자 권한으로 재실행 하면 된다. 구현 코드는 아래와 같다. private static bool IsAdministrator() { var wi = ..
WinForm을 하다보면 일반적인 Dialog가 아니라, Overlay 형태의 Dialog가 필요한 상황이 생긴다. MainForm에 팝업창이 하나 뜨는 Dialog가 아닌, MainForm과 Dialog 사이에 불투명한 레이어가 생기고, 그 위에 Dialog를 올리는 방식이다. 아래 스크린샷 처럼 실제 적용된 모습을 보면 이해가 쉬울것이다. 해당 기능은 아래와 같은 방식으로 구현된다. 1. 불투명 배경으로 사용될 OverlayForm 추가 2. OverlayForm 위에 올라올 Dialog 추가 3. MainForm에서 OverlayForm을 띄우고, OverlayForm에서 Dialog를 띄움 4. Dialog의 DialogResult를 OverlayForm에서 받고, MainForm에 전달 구현 코..
WindowsForms를 개발하다보면, 필연적으로 마주치는 상황이 생긴다. 타이틀바의 최소화, 최대화, 닫기 버튼 이라든지.. 뮤직플레이어의 재생, 정지 버튼이라든지.. 버튼의 텍스트를 아이콘으로 표현해야 하는 경우이다. (필자는 커스텀 타이틀바를 만들며 최소화, 최대화, 닫기 버튼의 아이콘이 필요했다.) 이러한 아이콘 형태를 지원하는 폰트가 있다. webdings, wingdings 1~3이 그것이다. C# 에서는 아래와 같이 간단하게 사용할 수 있다. (Windows10 기준으로 기본 설치된 상태) button.Font = new Font("Webdings"); button.Text = "r"; // X 아이콘 표기 button.Font = new Font("Wingdings"); button.Tex..
- Total
- Today
- Yesterday