Heim  >  Artikel  >  Backend-Entwicklung  >  ASP.NET Core-Beispiel-Tutorial: Tutorial zur Ausnahmebehandlung und zu statischen Dateien

ASP.NET Core-Beispiel-Tutorial: Tutorial zur Ausnahmebehandlung und zu statischen Dateien

零下一度
零下一度Original
2017-06-16 10:08:101374Durchsuche
<h1 class="h1">Asp.Net Core-Ausnahmebehandlung</h1> <ol class=" list-paddingleft-2"><li><p>Asp.Net Core-Ausnahmebehandlung</p></li></ol> <p>In diesem Kapitel besprechen wir Ausnahmen und Fehlerbehandlung. Wenn in einer ASP.NET Core-Anwendung ein Fehler auftritt, können Sie ihn auf verschiedene Arten behandeln. Schauen wir uns die Behandlung von Ausnahmen an, indem wir eine Middleware hinzufügen, die uns bei der Fehlerbehandlung hilft. </p> <p>Um einen Fehler zu simulieren, gehen wir zur Anwendung, führen sie aus und sehen, wie sich das Programm verhält, wenn wir nur eine Ausnahme auslösen. </p> <p class="cnblogs_code"><br></p> <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> <p> </p> <p> </p> <p> </p> <p>Es wird nur eine sehr allgemeine Ausnahmemeldung ausgegeben. Speichern Sie die Seite „Startup.cs“ und führen Sie Ihre Anwendung aus. </p> <p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-0.jpg" alt=""></p> <p>Sie werden sehen, dass wir diese Ressource nicht laden konnten. Es gab einen HTTP 500-Fehler, einen internen Serverfehler, und diese Seite war nicht sehr hilfreich. Es kann hilfreich sein, einige Ausnahmeinformationen zu erhalten. </p> <p>Fügen wir eine weitere Middleware hinzu, UseDeveloperExceptionPage. </p> <p class="cnblogs_code"><br></p> <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> <p> </p> <p> </p> <p>Diese Middleware unterscheidet sich ein wenig von den anderen, die normalerweise auf eingehende Anfragen warten und auf Anfragen antworten eine Antwort. </p> <p>UseDeveloperExceptionPage kümmert sich nicht so sehr darum, was später in der Pipeline mit der eingehenden Anfrage passiert. </p> <p>Es ruft einfach die nächste Middleware auf und wartet dann, um zu sehen, ob es eine Ausnahme in der Pipeline gibt. Wenn es eine Ausnahme gibt, zeigt Ihnen diese Middleware eine Fehlerseite über die Ausnahme an. </p> <p>Jetzt führen wir die Anwendung erneut aus. Dadurch wird eine Ausgabe erzeugt, wie im Screenshot unten gezeigt. </p> <p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-1.jpg" alt=""></p> <p>Wenn nun eine Ausnahme im Programm auftritt, werden auf der Seite einige Ausnahmeinformationen angezeigt, die Sie sehen möchten. Außerdem erhalten Sie einen Stack-Trace: Hier können Sie sehen, dass in Zeile 37 von Startup.cs eine nicht behandelte Ausnahme ausgelöst wurde. </p> <p>Alle diese Ausnahmeinformationen werden für Entwickler sehr nützlich sein. Tatsächlich möchten wir möglicherweise, dass diese Ausnahmemeldungen nur angezeigt werden, wenn der Entwickler die Anwendung ausführt. </p> <p> </p> <h1 class="h1">Statische Dateien von Asp.Net Core</h1> <ol class=" list-paddingleft-2"> <li><p>Statische Dateien von Asp.Net Core</p></li> <li><p>Fall</p></li> </ol> <p>In diesem Kapitel lernen wir, wie man Dateien verwendet. Fast jede Webanwendung benötigt eine wichtige Funktion: die Möglichkeit, Dateien (statische Dateien) aus dem Dateisystem bereitzustellen. </p> <ul class=" list-paddingleft-2"> <li><p>Statische Dateien wie JavaScript-Dateien, Bilder, CSS-Dateien usw., unsere Asp.Net Core-Anwendungen können Kunden direkt bereitgestellt werden. </p></li> <li><p>Statische Dateien befinden sich normalerweise im Web-Stammordner (wwwroot). </p></li> <li><p>Standardmäßig ist dies der einzige Ort, an dem wir Dateien direkt aus dem Dateisystem bereitstellen können. </p></li> </ul> <p> </p> <hr> <h2>Fall </h2> <p>Lassen Sie uns nun ein einfaches Beispiel durchgehen, um zu verstehen, wie wir diese statischen Dateien in unserer Anwendung bereitstellen. </p> <p>Hier möchten wir unserer FirstAppDemo-Anwendung eine einfache HTML-Datei hinzufügen, die im Web-Root-Ordner (wwwroot) abgelegt wird. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner „wwwroot“ und wählen Sie „Hinzufügen“ → „Neues Element“. </p> <p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-2.jpg" alt=""></p> <p>Wählen Sie im mittleren Bereich die HTML-Seite aus, nennen Sie sie index.html und klicken Sie auf die Schaltfläche „Hinzufügen“. </p> <p><img src="https://img.php.cn/upload/article/000/001/506/470d228a9709dbe93d976747550661ed-3.jpg" alt=""></p> <p>Sie sehen eine einfache index.html-Datei. Fügen wir wie unten gezeigt einfachen Text und Titel hinzu. </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> <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> <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> <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> <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> <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> <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>

Das obige ist der detaillierte Inhalt vonASP.NET Core-Beispiel-Tutorial: Tutorial zur Ausnahmebehandlung und zu statischen Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn