<h1 class="h1">Gestion des exceptions Asp.Net Core</h1>
<ol class=" list-paddingleft-2"><li><p>Gestion des exceptions Asp.Net Core</p></li></ol>
<p>Dans ce chapitre, nous discuterons des exceptions et gestion des erreurs. Lorsqu'une erreur se produit dans une application ASP.NET Core, vous pouvez la gérer de différentes manières. Examinons la gestion des exceptions en ajoutant un middleware qui nous aidera à gérer les erreurs. </p>
<p>Pour simuler une erreur, allons dans l'application, exécutons-la et voyons comment le programme se comporte si nous lançons simplement une exception. </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">Copier après la connexion</div></div>
<p> </p>
<p> </p>
<p> </p>
<p>Cela lancera seulement un message d'exception très général. Enregistrez la page Startup.cs et exécutez votre application. </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-0.jpg" alt=""></p>
<p>Vous verrez que nous n'avons pas réussi à charger cette ressource. Il y a eu une erreur HTTP 500, Erreur interne du serveur, et cette page n'a pas été très utile. Il peut être pratique d'obtenir des informations sur les exceptions. </p>
<p>Ajoutons un autre middleware, 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">Copier après la connexion</div></div>
<p> </p>
<p> </p>
<p>Ce middleware est un peu différent des autres, qui écoutent généralement les demandes entrantes et répondent aux demandes une certaine réponse. </p>
<p>UseDeveloperExceptionPage ne se soucie pas tellement de ce qui arrive à la requête entrante plus tard dans le pipeline. </p>
<p>Il appelle simplement le middleware suivant et attend ensuite de voir s'il y aura une exception dans le pipeline. S'il y a une exception, ce middleware vous donnera une page d'erreur concernant l'exception. </p>
<p>Maintenant, exécutons à nouveau l'application. Cela produira une sortie comme indiqué dans la capture d'écran ci-dessous. </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-1.jpg" alt=""></p>
<p>Maintenant, si une exception se produit dans le programme, vous verrez certaines informations d'exception que vous souhaitez voir sur la page. Vous obtiendrez également une trace de pile : ici, vous pouvez voir qu'une exception non gérée a été levée à la ligne 37 de Startup.cs. </p>
<p>Toutes ces informations sur les exceptions seront très utiles aux développeurs. En fait, nous souhaitons peut-être que ces messages d'exception ne soient affichés que lorsque le développeur exécute l'application. </p>
<p> </p>
<h1 class="h1">Fichiers statiques Asp.Net Core</h1>
<ol class=" list-paddingleft-2">
<li><p>Fichiers statiques Asp.Net Core</p></li>
<li><p>Cas</p></li>
</ol>
<p>Dans ce chapitre, nous allons apprendre à utiliser les fichiers. Presque toutes les applications Web nécessitent une fonctionnalité importante : la possibilité de servir des fichiers (fichiers statiques) à partir du système de fichiers. </p>
<ul class=" list-paddingleft-2">
<li><p>Fichiers statiques comme les fichiers JavaScript, les images, les fichiers CSS, etc., nos applications Asp.Net Core peuvent être fournies directement aux clients. </p></li>
<li><p>Les fichiers statiques se trouvent généralement dans le dossier racine Web (wwwroot). </p></li>
<li><p>Par défaut, c'est le seul endroit où nous pouvons servir des fichiers directement à partir du système de fichiers. </p></li>
</ul>
<p> </p>
<hr>
<h2>Cas </h2>
<p>Passons maintenant à un exemple simple pour comprendre comment nous servons ces fichiers statiques dans notre application. </p>
<p>Ici, nous souhaitons ajouter un simple fichier HTML à notre application FirstAppDemo, placé dans le dossier racine Web (wwwroot). Cliquez avec le bouton droit sur le dossier wwwroot dans l'Explorateur de solutions et sélectionnez Ajouter → Nouvel élément. </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-2.jpg" alt=""></p>
<p>Dans le volet du milieu, sélectionnez la page HTML et appelez-la index.html, cliquez sur le bouton Ajouter. </p>
<p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-3.jpg" alt=""></p>
<p>Vous verrez un simple fichier index.html. Ajoutons-y du texte simple et un titre comme indiqué ci-dessous. </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></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>
<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>
<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">Copier après la connexion</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">Copier après la connexion</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">Copier après la connexion</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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!