<h1 class="h1">Asp.Net Core の例外処理</h1>
<ol class=" list-paddingleft-2"><li><p>Asp.Net Core の例外処理</p></li></ol>
<p> この章では、例外とエラーの処理について説明します。 ASP.NET Core アプリケーションでエラーが発生した場合、さまざまな方法でエラーを処理できます。エラーの処理に役立つミドルウェアを追加して、例外の処理を見てみましょう。 </p>
<p> エラーをシミュレートするには、アプリケーションに移動して実行し、例外をスローした場合にプログラムがどのように動作するかを確認してみましょう。 </p>
<p class="cnblogs_code"><br></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> 1 using Microsoft.AspNet.Builder;
2 using Microsoft.AspNet.Hosting;
3 using Microsoft.AspNet.Http;
4 using Microsoft.Extensions.DependencyInjection;
5 using Microsoft.Extensions.Configuration;
6 namespace FirstAppDemo {
7 public class Startup {
8 public Startup() {
9 var builder = new ConfigurationBuilder()
10 .AddJsonFile("AppSettings.json");
11 Configuration = builder.Build();
12 }
13 public IConfiguration Configuration { get; set; }
14 15 // This method gets called by the runtime.
16 // Use this method to add services to the container.
17 // For more information on how to configure your application,
18 // visit http://go.microsoft.com/fwlink/?LinkID=398940 19 public void ConfigureServices(IServiceCollection services) {
20 }
21 22 // This method gets called by the runtime.
23 // Use this method to configure the HTTP request pipeline.24 public void Configure(IApplicationBuilder app) {
25 app.UseIISPlatformHandler();
26 app.UseRuntimeInfoPage();
27 28 app.Run(async (context) => {
29 throw new System.Exception("Throw Exception");
30 var msg = Configuration["message"];
31 await context.Response.WriteAsync(msg);
32 });
33 }
34 35 // Entry point for the application. 36 public static void Main(string[] args) => WebApplication.Run<Startup>(args);
37 }
38 }</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p></p>
<p></p>
<p></p>
<p>これは、非常に一般的な例外メッセージをスローするだけです。 Startup.cs ページを保存し、アプリケーションを実行します。 </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-0.jpg" alt=""></p>
<p> このリソースのロードに失敗したことがわかります。 HTTP 500 エラー、内部サーバー エラーが発生し、そのページはあまり役に立ちませんでした。例外情報を取得すると便利な場合があります。 </p>
<p>別のミドルウェア UseDeveloperExceptionPage を追加しましょう。 </p>
<p class="cnblogs_code"><br></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> 1 // This method gets called by the runtime.
2 // Use this method to configure the HTTP request pipeline. 3 public void Configure(IApplicationBuilder app) {
4 app.UseIISPlatformHandler();
5 app.UseDeveloperExceptionPage();
6 app.UseRuntimeInfoPage();
7 8 app.Run(async (context) => {
9 throw new System.Exception("Throw Exception");
10 var msg = Configuration["message"];
11 await context.Response.WriteAsync(msg);
12 });
13 }14</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p> </p>
<p> </p>
<p> このミドルウェアは他のミドルウェアとは少し異なり、他のミドルウェアは通常、受信リクエストをリッスンし、リクエストに対して何らかの応答を行います。 </p>
<p>UseDeveloperExceptionPage は、パイプラインの後半で受信リクエストに何が起こるかについてはあまり気にしません。 </p>
<p>次のミドルウェアを呼び出して、パイプラインで例外が発生するかどうかを待機するだけです。例外が発生した場合、このミドルウェアは例外に関するエラー ページを表示します。 </p>
<p>それでは、アプリケーションを再度実行してみましょう。これにより、以下のスクリーンショットに示すような出力が生成されます。 </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-1.jpg" alt=""></p>
<p>これで、プログラムで例外が発生した場合、ページ上に表示したい例外情報が表示されます。スタック トレースも取得できます。ここでは、Startup.cs の 37 行目で未処理の例外がスローされたことがわかります。 </p>
<p>この例外情報はすべて開発者にとって非常に役立ちます。実際、これらの例外メッセージは、開発者がアプリケーションを実行するときにのみ表示されるようにしたい場合があります。 </p>
<p> </p>
<h1 class="h1">Asp.Net Core 静的ファイル </h1>
<ol class=" list-paddingleft-2">
<li><p>Asp.Net Core 静的ファイル </p></li>
<li><p>Case </p></li>
</ol>
<p> この章では、ファイルの使用方法を学習します。ほぼすべての Web アプリケーションには、ファイル システムからファイル (静的ファイル) を提供する機能という重要な機能が必要です。 </p>
<ul class=" list-paddingleft-2">
<li><p>JavaScript ファイル、画像、CSS ファイルなどの静的ファイル、当社の Asp.Net Core アプリケーションは、顧客に直接提供できます。 </p></li>
<li><p>静的ファイルは通常、Web ルート (wwwroot) フォルダーにあります。 </p></li>
<li><p>デフォルトでは、これがファイルシステムから直接ファイルを提供できる唯一の場所です。 </p></li>
</ul>
<p> </p>
<hr>
<h2>ケース </h2>
<p> 次に、アプリケーションでこれらの静的ファイルを提供する方法を理解するために、簡単な例を見てみましょう。 </p>
<p>ここでは、Web ルート (wwwroot) フォルダーに配置された FirstAppDemo アプリケーションに単純な HTML ファイルを追加します。ソリューション エクスプローラーで wwwroot フォルダーを右クリックし、[追加] → [新しい項目] を選択します。 </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-2.jpg" alt=""></p>
<p>中央のペインで、HTML ページを選択し、index.html という名前を付け、[追加] ボタンをクリックします。 </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-3.jpg" alt=""></p>
<p>簡単なindex.htmlファイルが表示されます。以下に示すように、簡単なテキストとタイトルを追加しましょう。 </p>
<p class="syntaxhighlighter html"><br></p>
<table border="0"><tbody><tr class="firstRow">
<td class="gutter">
<p class="line number1 index0 alt2">1</p>
<p class="line number2 index1 alt1">2</p>
<p class="line number3 index2 alt2">3</p>
<p class="line number4 index3 alt1">4</p>
<p class="line number5 index4 alt2">5</p>
<p class="line number6 index5 alt1">6</p>
<p class="line number7 index6 alt2">7</p>
<p class="line number8 index7 alt1">8</p>
<p class="line number9 index8 alt2">9</p>
<p class="line number10 index9 alt1">10 </p>
</td>
<td class="code">
<p class="container"><br></p>
<p class="line number1 index0 alt2"><code class="html plain"><!DOCTYPE html> </code><code class="html plain"><!DOCTYPE html> </code></p>
<p class="line number2 index1 alt1"><code class="html plain"><</code><code class="html keyword">html</code><code class="html plain">> </code></p>
<p class="line number3 index2 alt2"><code class="html spaces"> </code><code class="html plain"><</code><code class="html keyword">head</code><code class="html plain">> </code></p>
<code class="html plain"><</code><code class="html キーワード">html</code><code class="html plain">> </code>🎜🎜<code class="html space"> </code><code class="html plain"><</code><code class="html キーワード">head< /code><code class="html plain"></code>🎜;<p class="line number4 index3 alt1"><code class="html spaces"> </code><code class="html plain"><</code><code class="html keyword">meta</code> <code class="html color1">charset</code><code class="html plain">=</code><code class="html string">"utf-8"</code> <code class="html plain">/> </code><p class="line number5 index4 alt2"><code class="html spaces"> </code><code class="html plain"><</code><code class="html keyword">title</code><code class="html plain">>Welcome to ASP.NET Core</</code><code class="html keyword">title</code><code class="html plain">> </code></p>
<p class="line number6 index5 alt1"><code class="html spaces"> </code><code class="html plain"></</code><code class="html keyword">head</code><code class="html plain">> </code></p>
<p class="line number7 index6 alt2"><code class="html spaces"> </code><code class="html plain"><</code><code class="html keyword">body</code><code class="html plain">> </code></p>
<p class="line number8 index7 alt1"><code class="html spaces"> </code><code class="html plain">Hello, Wolrd! this message is from our first static HTML file. </code></p>
<p class="line number9 index8 alt2"><code class="html spaces"> </code><code class="html plain"></</code><code class="html keyword">body</code><code class="html plain">> </code></p>
<p class="line number10 index9 alt1"><code class="html plain"></</code><code class="html keyword">html</code><code class="html plain">></code></p>
</td>
</tr></tbody></table>
<p>当您运行应用程序并在浏览器中输入index.html时,您将看到app.Run中间件将抛出一个异常,因为目前在我们的应用程序中什么都没有。</p>
<p><img src="https://img.php.cn/upload/article/000/001/506/315d89c3796749d419a682e7ec51873a-4.jpg" alt=""></p>
<p>现在我们的项目中没有中间件会去找文件系统上的任何文件。</p>
<p>为了解决这个问题,通过在解决方案资源管理器中右键单击您的项目并选择管理NuGet包进入到NuGet包管理器。</p>
<p><img src="https://img.php.cn/upload/article/000/001/506/315d89c3796749d419a682e7ec51873a-5.jpg" alt=""></p>
<p>搜索 Microsoft.AspNet.StaticFiles,会找到静态文件中间件。让我们安装此 nuget 程序包,现在我们可以在Configure方法中注册中间件。</p>
<p>让我们在下面的程序中所示的Configure方法中添加 UseStaticFiles 中间件。</p>
<p class="cnblogs_code"><br></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> 1 using Microsoft.AspNet.Builder;
2 using Microsoft.AspNet.Hosting;
3 using Microsoft.AspNet.Http;
4 using Microsoft.Extensions.DependencyInjection;
5 using Microsoft.Extensions.Configuration;
6 namespace FirstAppDemo {
7 public class Startup {
8 public Startup() {
9 var builder = new ConfigurationBuilder()
10 .AddJsonFile("AppSettings.json");
11 Configuration = builder.Build();
12 }
13 public IConfiguration Configuration { get; set; }
14 15 // This method gets called by the runtime.
16 // Use this method to add services to the container.
17 // For more information on how to configure your application,
18 // visit http://go.microsoft.com/fwlink/?LinkID=398940 19 public void ConfigureServices(IServiceCollection services) {
20 }
21 22 // This method gets called by the runtime.
23 // Use this method to configure the HTTP request pipeline. 24 public void Configure(IApplicationBuilder app) {
25 app.UseIISPlatformHandler();
26 app.UseDeveloperExceptionPage(); app.UseRuntimeInfoPage();
27 app.UseStaticFiles();
28 29 app.Run(async (context) => {
30 throw new System.Exception("Throw Exception");
31 var msg = Configuration["message"];
32 await context.Response.WriteAsync(msg);
33 });
34 }
35 36 // Entry point for the application. 37 public static void Main(string[] args) => WebApplication.Run<Startup>(args);
38 }
39 }</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p>除非你通过传入一些不同的配置参数来覆盖选项,否则静态文件会对于一个给定的请求看作是请求路径。这个请求路径是相对于文件系统。</p>
<ul class=" list-paddingleft-2">
<li><p>如果静态文件根据url找到一个文件,它将直接返回该文件,而不调用下一个块中间件。</p></li>
<li><p>如果没有找到匹配的文件,那么它会继续执行下一个块中间件。</p></li>
</ul>
<p>让我们保存Startup.cs文件并刷新浏览器。</p>
<p><img src="https://img.php.cn/upload/article/000/001/506/315d89c3796749d419a682e7ec51873a-6.jpg" alt=""></p>
<p>你现在可以看到index.html文件。你放置在wwwroot文件夹下任何地方的任何JavaScript文件、CSS文件或者HTML文件,您都能够在Asp.Net Core中直接当静态文件使用。</p>
<ul class=" list-paddingleft-2">
<li><p>在如果你想 让index.html作为您的默认文件,IIS一直有这种功能。</p></li>
<li><p>你可以给 IIS 一个默认文件列表。如果有人访问根目录,在这种情况下,如果 IIS 找到命名为 index.html的文件,它就会自动将该文件返回给客户端。</p></li>
<li><p>让我们现在开始进行少量更改。首先,我们需要删除强制的错误,然后添加另一块的中间件,这就是 UseDefaultFiles。以下是配置方法的实现。</p></li>
<li>
<p class="cnblogs_code"><br></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> 1 / This method gets called by the runtime.
2 // Use this method to configure the HTTP request pipeline. 3 public void Configure(IApplicationBuilder app) {
4 app.UseIISPlatformHandler();
5 app.UseDeveloperExceptionPage();
6 7 app.UseRuntimeInfoPage();
8 app.UseDefaultFiles();
9 app.UseStaticFiles();
10 11 app.Run(async (context) => {
12 var msg = Configuration["message"];
13 await context.Response.WriteAsync(msg);
14 });
15 }</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p> </p>
</li>
</ul>
<p> </p>
<ul class=" list-paddingleft-2">
<li><p>这段中间件将监听传入的请求,如果请求是根目录,就查看是否有匹配的默认文件。</p></li>
<li><p>您可以覆盖这个中间件的选项来告诉它如何匹配默认文件,但index.html是默认情况下的一个默认的文件。</p></li>
</ul>
<p>让我们保存 Startup.cs 文件并将您的浏览器转到 web 应用程序的根目录。</p>
<p><img src="https://img.php.cn/upload/article/000/001/506/315d89c3796749d419a682e7ec51873a-7.jpg" alt=""></p>
<p>你现在可以看到index.html是默认文件。你安装中间件的顺序是很重要的,因为如果你将UseDefaultFiles放置在UseStaticFiles之后,你将可能不会得到相同的结果。</p>
<p>如果你想要使用UseDefaultFiles和UseStaticFiles中间件,你可以使用另一个中间件Microsoft.aspnet.staticfiles,它也是NuGet包,它是一个服务器中间件。这本质上是以正确的顺序包含了默认文件和静态文件。</p>
<p class="cnblogs_code"><br></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> 1 // This method gets called by the runtime.
2 // Use this method to configure the HTTP request pipeline. 3 public void Configure(IApplicationBuilder app) {
4 app.UseIISPlatformHandler();
5 app.UseDeveloperExceptionPage();
6 7 app.UseRuntimeInfoPage();
8 app. UseFileServer();
9 10 app.Run(async (context) => {
11 var msg = Configuration["message"];
12 await context.Response.WriteAsync(msg);
13 });
14 }</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p> </p>
<p> </p>
<p>让我们再一次保存 Startup.cs 文件。一旦你刷新浏览器,你将看到相同的结果,如下面的屏幕快照所示。</p>
<p><img src="https://img.php.cn/upload/article/000/001/506/b33e085c39ca50d6c54911a15965303c-8.jpg" alt=""></p>
以上がASP.NET Core サンプル チュートリアル: 例外処理と静的ファイルのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。