坂本  篤司

坂本 篤司

1656952200

ASP.NETCoreアプリケーションでのグローバル例外処理

この記事では、ASP.NETCoreアプリケーションでのグローバル例外処理について学習します。例外はどのアプリケーションでも避けられないものですが、コードベースはそうです。これは通常、ネットワークの問題などの外部要因によっても発生する可能性があります。これらの例外がアプリケーション内で適切に処理されない場合、アプリケーション全体が終了してデータが失われる可能性さえあります。

実装のソースコードはここにあります。

ASP.NETCoreでの例外処理の開始

このデモンストレーションでは、新しいASP.NET CoreWebAPIプロジェクトに取り組んでいます。デフォルトのIDEとしてVisualStudio2019を使用します。

try-catchブロックは、迅速な例外処理に関しては、私たちの頼りになるアプローチです。同じことを示すコードスニペットを見てみましょう。

[HttpGet]
public IActionResult Get()
{
try
{
var data = GetData(); //Assume you get some data here which is also likely to throw an exception in certain cases.
return Ok(data);
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return StatusCode(500);
}
}

これが私たち全員が慣れている基本的な実装ですよね?GetData()メソッドは、特定の外部要因によって例外が発生する傾向があるサービス呼び出しであると想定します。スローされた例外は、エラーをコンソールに記録する責任があるcatchブロックによってキャッチされ、このシナリオでは500 InternalServerErrorのステータスコードを返します。

ASP.NET Coreアプリケーションでのロギングの詳細については、ASP.NETCoreに最適な2つのロギングフレームワークであるSerilogNLogを使用したロギングを示す次の記事を参照することをお勧めします。

Get()メソッドの実行中に例外が発生したとしましょう。以下のコードは、トリガーされる例外です。

新しい例外をスローします「エラーが発生しました...」 ;

これがSwaggerで表示されるものです。

imageASP.NETCoreでのグローバル例外処理-究極のガイド

コンソールは、行番号やその他のトレースログなど、例外に関する詳細を取得する場合があります。

image 1ASP.NETCoreでのグローバル例外処理-UltimateGuide

これは例外を処理するための簡単な方法ですが、アプリケーションのコード行を増やすこともできます。はい、非常に単純で小さなアプリケーションに対してこのアプローチを使用できます。すべてのコントローラーのアクションおよびその他のサービスメソッドにtry-catchブロックを書き込む必要があると想像してください。かなり反復的で実行可能ではありませんね

すべての例外を1か所で一元的に処理する方法があれば理想的ですよね?次のセクションでは、すべての処理ロジックを1つの領域に分離することで、例外処理メカニズムを大幅に改善できる2つのアプローチについて説明します。これにより、コードベースが改善されるだけでなく、例外処理の問題がさらに少なくなり、アプリケーションがより制御されます。

ASP.NETCoreのデフォルトの例外処理ミドルウェア

作業を簡単にするために、UseExceptionHandlerミドルウェアはASP.NETCoreアプリケーションに付属しています。これをスタートアップクラスのConfigureメソッドで構成すると、アプリケーションのパイプラインにミドルウェアが追加され、アプリケーションの内外で例外をキャッチします。それがミドルウェアとパイプラインの仕組みですよね?

UseExceptionHandlerがどのように実装されているかを見てみましょう。ASP.NET CoreアプリケーションのStartupクラスでConfigureメソッドを開き、次のように構成します。

app.UseExceptionHandler(
options =>
{
options.Run(async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
context.Response.ContentType = "text/html";
var exceptionObject = context.Features.Get<IExceptionHandlerFeature>();
if (null != exceptionObject)
{
var errorMessage = $"{exceptionObject.Error.Message}";
await context.Response.WriteAsync(errorMessage).ConfigureAwait(false);
}});
}
);

これは、UseExceptionHandlerミドルウェアの非常に基本的なセットアップと使用法です。したがって、アプリケーションのパイプライン内で検出された例外がある場合は常に、制御はこのミドルウェアにフォールバックし、ミドルウェアは代わりにカスタム応答を要求の送信者に送信します。

この場合、400 Bad Requestのステータスコードが、元の例外のメッセージコンテンツ(このシナリオでは「エラーが発生しました…」)とともに送信されます。かなり簡単ですよね?Swaggerで例外がどのように表示されるかを次に示します。

image 2ASP.NETCoreでのグローバル例外処理-UltimateGuide

これで、アプリケーションのいずれかの部分で例外がスローされると、このミドルウェアはそれをキャッチし、必要な例外をコンシューマーにスローします。多くのクリーンアップされたコードですね しかし、これを改善する方法はまだまだあります。

カスタムミドルウェア–ASP.NETCoreでのグローバル例外処理

このセクションでは、開発者にさらに詳細な制御を提供し、プロセス全体を大幅に改善するカスタムグローバル例外処理ミドルウェアを作成しましょう。

カスタムグローバル例外処理ミドルウェア–まず、それは何ですか?これは、カスタムエラー処理ロジックを含むASP.NETCoreパイプラインのミドルウェアとして構成できるコードの一部です。このパイプラインでキャッチできるさまざまな例外があります。

また、基本的にアプリケーションが簡単に理解できるより賢明な例外をスローできるようにするカスタム例外クラスを作成します。

ただし、その前に、作成するすべてのプロジェクト、少なくとも概念の一部になることをお勧めするResponseクラスを作成しましょう。したがって、ASP.NET Core APIがどのような種類の要求に遭遇しても、均一な応答を送信するようにするという考え方です。これにより、APIを使用している人の作業が簡単になります。さらに、開発中に多くの経験を提供します。

新しいクラスApiResponseを作成し、以下をコピーします。

public class ApiResponse<T>
{
public T Data { get; set; }
public bool Succeeded { get; set; }
public string Message { get; set; }
public static ApiResponse<T> Fail(string errorMessage)
{
return new ApiResponse<T> { Succeeded = false, Message = errorMessage };
}
public static ApiResponse<T> Success(T data)
{
return new ApiResponse<T> { Succeeded = true, Data = data };
}
}

ApiResponseクラスはジェネリック型です。つまり、あらゆる種類のデータを一緒に渡すことができます。Dataプロパティは、サーバーから返された実際のデータを保持します。メッセージには、文字列タイプの例外または情報メッセージが含まれています。そして最後に、要求が成功したかどうかを示すブール値があります。要件に応じて、他の複数のプロパティを追加することもできます。

例外処理シナリオ用に特別に構築されたFailandSuccessメソッドもあります。これがどのように使用されているかは、次のセクションで確認できます。

前述のように、カスタム例外も作成しましょう。新しいクラスを作成し、SomeException.csなどの名前を付けます。基本クラスとしてExceptionを継承していることを確認してください。カスタム例外は次のようになります。

public class SomeException : Exception
{
public SomeException() : base()
{
}
public SomeException(string message) : base(message)
{
}
public SomeException(string message, params object[] args) : base(String.Format(CultureInfo.CurrentCulture, message, args))
{
}
}

これが、今作成したこのカスタム例外クラスの使用方法です。

throw new SomeException("An error occurred...");

アイデアが浮かびますよね?このようにして、実際に例外を区別することができます。このシナリオに関連してさらに明確にするために、ProductNotFoundException、StockExpiredException、CustomerInvalidExceptionなどの他のカスタム例外があるとします。簡単に識別できるように、意味のある名前を付けてください。これで、特定の例外が発生した場合はいつでも、これらの例外クラスを使用できます。これにより、関連する例外がミドルウェアに送信されます。ミドルウェアには、それを処理するロジックがあります。

それでは、グローバル例外処理ミドルウェアを作成しましょう。新しいクラスを作成し、ErrorHandlerMiddleware.csという名前を付けます

public class ErrorHandlerMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception error)
{
var response = context.Response;
response.ContentType = "application/json";
var responseModel = ApiResponse<string>.Fail(error.Message);
switch (error)
{
case SomeException e:
// custom application error
response.StatusCode = (int)HttpStatusCode.BadRequest;
break;
case KeyNotFoundException e:
// not found error
response.StatusCode = (int)HttpStatusCode.NotFound;
break;
default:
// unhandled error
response.StatusCode = (int)HttpStatusCode.InternalServerError;
break;
}
var result = JsonSerializer.Serialize(responseModel);
await response.WriteAsync(result);
}
}
}

3行目– RequestDelegateは、HTTPリクエストの完了を示します。
10行目–リクエストデリゲートに対する単純なtry-catchブロック。これは、現在の要求のパイプラインにいずれかのタイプの例外がある場合は常に、制御がcatchブロックに移動することを意味します。このミドルウェアでは、Catchブロックにすべての利点があります。

14行目–すべての例外をキャッチします。すべてのカスタム例外は、Exception基本クラスから派生していることを忘れないでください。
18行目–前に作成したFailメソッドを使用して、エラーメッセージからAPIReponseモデルを作成します。
21行目–キャッチされた例外のタイプがSomeExceptionの場合、ステータスコードはBadRequestに設定されます。あなたはその考えを理解しますね 他の例外も同様の方法で処理されます。
34行目–最後に、作成されたapi-responseモデルがシリアル化され、応答として送信されます。

この実装を実行する前に、このミドルウェアをアプリケーションパイプラインに追加することを忘れないでください。Startup.cs / Configureメソッドを開き、次の行に追加します。

app.UseMiddleware<ErrorHandlerMiddleware>();

不要な衝突を引き起こす可能性があるため、UseExceptionHandlerのデフォルトのミドルウェアをコメントアウトまたは削除してください。複数のミドルウェアが同じことをするのは意味がありませんね

また、使用しているデフォルトのコントローラーのGetメソッドでSomeException例外をスローする必要な変更を行ったと仮定します。

それが終わったら、アプリケーションを実行して、Swaggerでエラーがどのように表示されるかを見てみましょう。

image 3ASP.NETCoreでのグローバル例外処理-UltimateGuide

どうぞ!応答がどれだけうまく構築されているか、APIがクライアントに何を言っているかを読むのがどれほど簡単かがわかります。これで、完全にカスタムビルドされたエラー処理メカニズムがすべて1か所にまとめられました。もちろん、前述のように、アプリケーションのニーズに合わせて、APIReponsesクラスにプロパティをいつでも自由に追加できます。

私は文字通りすべてのオープンソースプロジェクトにこのアプローチを使用してきました。それでは、今のところ記事を締めくくりましょう。 

概要

この記事では、ASP.NETCoreアプリケーションに例外処理を実装するためのさまざまな方法について説明しました。お気に入りのアプローチは、カスタムミドルウェアを使用してASP.NETCoreでグローバル例外処理を実装したアプローチであることは間違いありません。完全なソースコードは、私のGithubのここにもあり ます。何か提案や質問がありますか?以下のコメントセクションにそれらを残してください。ありがとう、そしてハッピーコーディング!

ソース:https ://codewithmukesh.com/blog/global-exception-handling-in-aspnet-core/ 

#aspdotnet #dotnet 

What is GEEK

Buddha Community

ASP.NETCoreアプリケーションでのグローバル例外処理
Einar  Hintz

Einar Hintz

1602560783

jQuery Ajax CRUD in ASP.NET Core MVC with Modal Popup

In this article, we’ll discuss how to use jQuery Ajax for ASP.NET Core MVC CRUD Operations using Bootstrap Modal. With jQuery Ajax, we can make HTTP request to controller action methods without reloading the entire page, like a single page application.

To demonstrate CRUD operations – insert, update, delete and retrieve, the project will be dealing with details of a normal bank transaction. GitHub repository for this demo project : https://bit.ly/33KTJAu.

Sub-topics discussed :

  • Form design for insert and update operation.
  • Display forms in modal popup dialog.
  • Form post using jQuery Ajax.
  • Implement MVC CRUD operations with jQuery Ajax.
  • Loading spinner in .NET Core MVC.
  • Prevent direct access to MVC action method.

Create ASP.NET Core MVC Project

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N).

From new project window, Select Asp.Net Core Web Application_._

Image showing how to create ASP.NET Core Web API project in Visual Studio.

Once you provide the project name and location. Select Web Application(Model-View-Controller) and uncheck HTTPS Configuration. Above steps will create a brand new ASP.NET Core MVC project.

Showing project template selection for .NET Core MVC.

Setup a Database

Let’s create a database for this application using Entity Framework Core. For that we’ve to install corresponding NuGet Packages. Right click on project from solution explorer, select Manage NuGet Packages_,_ From browse tab, install following 3 packages.

Showing list of NuGet Packages for Entity Framework Core

Now let’s define DB model class file – /Models/TransactionModel.cs.

public class TransactionModel
{
    [Key]
    public int TransactionId { get; set; }

    [Column(TypeName ="nvarchar(12)")]
    [DisplayName("Account Number")]
    [Required(ErrorMessage ="This Field is required.")]
    [MaxLength(12,ErrorMessage ="Maximum 12 characters only")]
    public string AccountNumber { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Beneficiary Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BeneficiaryName { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Bank Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BankName { get; set; }

    [Column(TypeName ="nvarchar(11)")]
    [DisplayName("SWIFT Code")]
    [Required(ErrorMessage = "This Field is required.")]
    [MaxLength(11)]
    public string SWIFTCode { get; set; }

    [DisplayName("Amount")]
    [Required(ErrorMessage = "This Field is required.")]
    public int Amount { get; set; }

    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime Date { get; set; }
}

C#Copy

Here we’ve defined model properties for the transaction with proper validation. Now let’s define  DbContextclass for EF Core.

#asp.net core article #asp.net core #add loading spinner in asp.net core #asp.net core crud without reloading #asp.net core jquery ajax form #asp.net core modal dialog #asp.net core mvc crud using jquery ajax #asp.net core mvc with jquery and ajax #asp.net core popup window #bootstrap modal popup in asp.net core mvc. bootstrap modal popup in asp.net core #delete and viewall in asp.net core #jquery ajax - insert #jquery ajax form post #modal popup dialog in asp.net core #no direct access action method #update #validation in modal popup

Hire ASP.Net Developers

Looking to outsource your asp dot net development requirement?

ASP.Net is a special feature of the DOT Net framework created by Microsoft. At HourlyDeveloper.io, we have a team of experienced ASP.Net developers who are experts in delivering custom solutions based on your business requirements. Hire ASP.Net Developers who will provide tailored solutions to facilitate your business growth.

Consult with experts: https://bit.ly/3fNpVqr

#hire asp.net developers #asp.net development company #asp.net development services #asp.net development #asp.net developer #asp.net

Einar  Hintz

Einar Hintz

1602564619

MVC User Registration & Login with ASP.NET Core Identity

User registration and authentication are mandatory in any application when you have little concern about privacy. Hence all most all application development starts with an authentication module. In this article, we will discuss the quickest way to use **ASP.NET Core Identity for User Login and Registration **in a new or existing MVC application.

Sub-topics discussed :

  • How to add ASP.NET Core Identity to MVC application.
  • Customize ASP.NET Core Identity.
  • Identity.UI Design Customization.
  • Next step.

Background

ASP.NET Core Identity is an API, which provides both user interface(UI) and functions for user authentication, registration, authorization, etc. Modules/ APIs like this will really be helpful and fasten the development process. It comes with ASP.NET Core Framework and used in many applications before. Which makes the API more dependable and trustworthy.

ASP.NET Core MVC with user authentication can easily be accomplished using Identity.UI. While creating the MVC project, you just need to select Authentication as Individual User Accounts.

Showing how to create an MVC application with ASP.NET Core Identity API

The rest will be handled by ASP.NET Core Identity UI. It already contains razor view pages and backend codes for an authentication system. But that’s not what we want in most of the cases. we want to customize ASP.NET Core Identity as per our requirement. That’s what we do here.

Create an ASP.NET Core MVC Project

First of all, I will create a brand new ASP.NET Core MVC application without any authentication selected. We could add ASP.NET Core Identity later into the project.

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N). From new project window, select ASP.NET Core Web Application.

Create an ASP.NET Core Web application

Once you provide the project name and location. A new window will be opened as follows, Select _Web Application(Model-View-Controller), _uncheck _HTTPS Configuration _and DO NOT select any authentication method. Above steps will create a brand new ASP.NET Core MVC project.

Select Model View Controller templet under .NET Core

#asp.net core article #asp.net core #add asp.net core identity to existing project #asp.net core identity in mvc #asp.net core mvc login and registration #login and logout in asp.net core

ASP.Net Web development Company USA | WebClues Infotech

A versatile Web & Mobile App Development framework technology that is fast, reliable, and easy to use is ASP.NET. ASP.NET gives the developer complete control over development and can be used on any project big or small.

Want to develop a website or mobile app with ASP.NET?

WebClues Infotech with years of experience and a highly skilled development team can be your go-to agency for your Web & Mobile App Development requirements. With an expert developer team of more than 150+ members, WebClues Infotech has successfully delivered more than 1500 projects worldwide.

Want to know more about the ASP.NET framework?

Visit: https://www.webcluesinfotech.com/asp-net-web-development/

Share your requirements https://www.webcluesinfotech.com/contact-us/

View Portfolio https://www.webcluesinfotech.com/portfolio/

#asp.net web development company #asp.net web development company usa #asp.net development company in india #asp.net development company #.net software development company #hire asp.net developer

Routing in MVC - ASP.NET Core Demystified

ASP.NET Core MVC has introduced quite a few concepts that new (or new-to-ASP.NET) web developers might have some difficulty getting caught up with. My ASP.NET Core Demystified series is designed to help these developers get started building their own custom, full-fledged, working AASP.NET Core applications. In

#asp.net core demystified #mvc - asp.net core #asp.net core #asp.net #programming