Blazor 를 사용하는 경우 가능한 한 빨리 예외 로 설정하는 것이 좋습니다.

8754 단어 예외Blazor
이 내용은 Blazor Advent Calendar 2019의 9일째 보도입니다.

처음에는 예외를 고려하지 않고 깔끔한 사람도 Blazor에서 예외 처리를 할 수 있습니다!


만약 Blazor를 사용한다면, 우리는 가능한 한 빨리 예외 처리를 진행할 것이다.특히 처음에는 예외를 생각하지 말고 열심히 하는 타입이라도 하는 게 좋다.실제로 나는 신기술을 접할 때도 언어 규범을 거의 읽지 못하고 예외를 의식하는 프로그램을 쓰지 않는다.먼저 샘플을 만져보고 그 샘플을 자신이 만든 물건에 넣은 다음에 툭툭 하고 하고 냉정해진 후에야 예외를 깨달았다.그러나 블라조르에 관해서는 예외를 이 지경까지 내팽개치는 것은 상당한 시간을 낭비하는 것이라고 생각한다.

Blazor의 샘플로 제작할 때의 전형적인 추진 방법


Blazor로 데이터베이스 등에서 수치를 얻을 때 샘플을 참고하면 웹API를 통해 수치를 얻을 수 있을 것이라고 생각합니다.
    protected override async Task OnInitAsync()
    {
        //GetJsonAsyncでサーバーから値を取得
        forecasts = await Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecasts");
    }
그리고 '측은 값을 얻기 전에 Loading을 표시하고, 얻은 후에 이 값을 표시하는 프로그램이 될 것이라고 생각합니다.
    @if (forecasts == null) //←値が取れない時はローディング表示
    {
        <p><em>Loading...</em></p>
    }
    else                    //←値が取れたらその値を表示
    {
        @foreach (var forecast in forecasts)
        {
            <tr>
                <td>@forecast.Date.ToShortDateString()</td>
            </tr>
        }
    }
사실 나도 이렇게 계속 만들었다자체 제작 서비스.

이 상태에서 예외가 발생하면


그러면 개발 과정에서 각양각색의 예외가 발생할 것이다.예를 들어 URL을 잘못 걸었거나 인터넷에 연결할 수 없는 상태에서 방문하거나 단순한 설치 오류 등이다.그럼 어떻게 될까요?GetJsonAsync 중 예외forecastsnull로 유지됐다.
    forecasts = await Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecasts");
즉'항상 부하 표시'라는 뜻이다.
    @if (forecasts == null) //←値が取れない時はローディング表示
    {
        <p><em>Loading...</em></p>
    }
예외가 발생했을 때 = 마운트에서 전진하지 않을 때.이렇게 되면 로딩 화면이 평소보다 길다고 느낄 때까지 예외를 눈치채지 못할 것이다.나는 또 어디에서 예외가 발생했는지 모르겠다.개발자 도구를 사용하면 서버 측의 예외를 알 수 있지만 클라이언트 측의 예외를 확정할 수 없습니다.Windows의 개발이라면 예외가 발생할 때 Visual Studio는 자동으로 실행 시 예외가 발생하는 부분을 잡는다.이 환경에서만 개발했기 때문에 솔직히 예외에 대해 아무것도 생각해 본 적이 없다.하지만 블라조르는 현재 시행 중인 시점에서 예외가 발생하더라도 아무것도 하지 않는다.

Blazor의 예외 대응


그러나 가장 추천하는 것은 (특히 개발 중이라면) 오류 페이지를 건너뛰고 그 페이지에 예외적인 창고 흔적을 그리는 것이다.그때 좀 빠져서 요령을 썼어요.우선 예외적으로 포위Http.GetJsonAsync하고 예외가 발생했을 때NavigationManager.NavigateTo는 오류 페이지를 건너뛴다.매개 변수에 예외 정보를 던질 때WebUtility.UrlEncode.이렇게 하면 오류 페이지에 예외 내용을 매개 변수로 전달합니다.
        try
        {
            forecasts = await Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecasts");
        }
        catch (Exception ex)
        {
            NavigationManager.NavigateTo(WebUtility.UrlEncode($"error?message=" + ex.Message + Environment.NewLine + ex.StackTrace));
            throw;
        }
그리고 오류 페이지에 파라미터를 표시할 때 WebUtility.UrlDecode.이렇게 하면 창고 추적이 줄로 바뀌지 않고 \n<br>로 바뀐다.
    protected override void OnInitialized()
    {
        var url = NavigationManager.Uri;
        Message = WebUtility.UrlDecode(url.ToValue("message"));
        Message = Message.Replace("\n", "<br>");
    }
그리고''라고 쓸 때@((MarkupString)Message) 표기 문자를 직접 표시한다.
    <div>
        <h1>ERROR</h1>
        @((MarkupString)Message)
        <br>
        <br>
        <a href="/">Topに戻る</a>
    </div>
이렇게 되면 예외가 생길 수 있다.예외적인 경우 복귀 버튼이 영원히 돌아가지 않을 수 있다(예외가 해제되지 않으면 예외가 발생하여 같은 페이지로 날아갈 수 있다). 그러므로 탑으로 돌아가는 링크를 준비하는 것이 좋다.

이 정도면 됐어.그럼 이제 열심히 하자!

이 내용은 쓰레기통에 가는 내용입니까?


asp.넷 코어 3.1을 내고 최신 Blazor의 메일박스를 봤는데 Attach to process debugging from Visual Studio라는 말이 있었어요.나는 여기에 쓴 내용이 이미 필요하지 않을 것 같지만, 적어도 나는 아무 생각도 하지 않고attach를 설정할 수 있는 것은 아니다.알면 메모할 수도 있어.

좋은 웹페이지 즐겨찾기