121 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						||
<head>
 | 
						||
<title>Program.cs</title>
 | 
						||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
						||
<style type="text/css">
 | 
						||
.s0 { color: #6c95eb;}
 | 
						||
.s1 { color: #d0d0d0;}
 | 
						||
.s2 { color: #bdbdbd;}
 | 
						||
.s3 { color: #c9a26d;}
 | 
						||
.s4 { color: #85c46c; font-style: italic;}
 | 
						||
.s5 { color: #ed94c0;}
 | 
						||
.ln { color: #808080; font-weight: normal; font-style: normal; }
 | 
						||
</style>
 | 
						||
</head>
 | 
						||
<body bgcolor="#262626">
 | 
						||
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
 | 
						||
<tr><td><center>
 | 
						||
<font face="Arial, Helvetica" color="#000000">
 | 
						||
Program.cs</font>
 | 
						||
</center></td></tr></table>
 | 
						||
<pre><a name="l1"><span class="ln">1    </span></a><span class="s0">using </span><span class="s1">AGSS</span><span class="s2">.</span><span class="s1">Models</span><span class="s2">;</span>
 | 
						||
<a name="l2"><span class="ln">2    </span></a><span class="s0">using </span><span class="s1">AGSS</span><span class="s2">.</span><span class="s1">Models</span><span class="s2">.</span><span class="s1">Template</span><span class="s2">;</span>
 | 
						||
<a name="l3"><span class="ln">3    </span></a><span class="s0">using </span><span class="s1">Microsoft</span><span class="s2">.</span><span class="s1">AspNetCore</span><span class="s2">.</span><span class="s1">Authentication</span><span class="s2">.</span><span class="s1">JwtBearer</span><span class="s2">;</span>
 | 
						||
<a name="l4"><span class="ln">4    </span></a><span class="s0">using </span><span class="s1">Microsoft</span><span class="s2">.</span><span class="s1">EntityFrameworkCore</span><span class="s2">;</span>
 | 
						||
<a name="l5"><span class="ln">5    </span></a><span class="s0">using </span><span class="s1">Microsoft</span><span class="s2">.</span><span class="s1">IdentityModel</span><span class="s2">.</span><span class="s1">Tokens</span><span class="s2">;</span>
 | 
						||
<a name="l6"><span class="ln">6    </span></a>
 | 
						||
<a name="l7"><span class="ln">7    </span></a>
 | 
						||
<a name="l8"><span class="ln">8    </span></a>
 | 
						||
<a name="l9"><span class="ln">9    </span></a>
 | 
						||
<a name="l10"><span class="ln">10   </span></a>
 | 
						||
<a name="l11"><span class="ln">11   </span></a>
 | 
						||
<a name="l12"><span class="ln">12   </span></a>
 | 
						||
<a name="l13"><span class="ln">13   </span></a>
 | 
						||
<a name="l14"><span class="ln">14   </span></a>
 | 
						||
<a name="l15"><span class="ln">15   </span></a>
 | 
						||
<a name="l16"><span class="ln">16   </span></a>
 | 
						||
<a name="l17"><span class="ln">17   </span></a><span class="s1">var builder </span><span class="s2">= </span><span class="s1">WebApplication</span><span class="s2">.</span><span class="s1">CreateBuilder</span><span class="s2">(</span><span class="s1">args</span><span class="s2">);</span>
 | 
						||
<a name="l18"><span class="ln">18   </span></a>
 | 
						||
<a name="l19"><span class="ln">19   </span></a>
 | 
						||
<a name="l20"><span class="ln">20   </span></a>
 | 
						||
<a name="l21"><span class="ln">21   </span></a>
 | 
						||
<a name="l22"><span class="ln">22   </span></a><span class="s1">var domain </span><span class="s2">= </span><span class="s1">builder</span><span class="s2">.</span><span class="s1">Configuration</span><span class="s2">[</span><span class="s3">"Auth0:Domain"</span><span class="s2">];</span>
 | 
						||
<a name="l23"><span class="ln">23   </span></a><span class="s1">var audience </span><span class="s2">=</span><span class="s1">builder</span><span class="s2">.</span><span class="s1">Configuration</span><span class="s2">[</span><span class="s3">"Auth0:Audience"</span><span class="s2">];</span>
 | 
						||
<a name="l24"><span class="ln">24   </span></a>
 | 
						||
<a name="l25"><span class="ln">25   </span></a><span class="s4">//数据库配置(PGSQL)</span>
 | 
						||
<a name="l26"><span class="ln">26   </span></a><span class="s1">builder</span><span class="s2">.</span><span class="s1">Services</span><span class="s2">.</span><span class="s1">AddDbContext</span><span class="s2"><</span><span class="s1">DBContext</span><span class="s2">>(</span><span class="s1">opt =></span>
 | 
						||
<a name="l27"><span class="ln">27   </span></a>    <span class="s1">opt</span><span class="s2">.</span><span class="s1">UseNpgsql</span><span class="s2">(</span><span class="s1">builder</span><span class="s2">.</span><span class="s1">Configuration</span><span class="s2">.</span><span class="s1">GetConnectionString</span><span class="s2">(</span><span class="s3">"DBContext"</span><span class="s2">)));</span>
 | 
						||
<a name="l28"><span class="ln">28   </span></a>
 | 
						||
<a name="l29"><span class="ln">29   </span></a><span class="s4">//鉴权配置</span>
 | 
						||
<a name="l30"><span class="ln">30   </span></a><span class="s1">builder</span><span class="s2">.</span><span class="s1">Services</span><span class="s2">.</span><span class="s1">AddAuthentication</span><span class="s2">(</span><span class="s1">JwtBearerDefaults</span><span class="s2">.</span><span class="s1">AuthenticationScheme</span><span class="s2">)</span>
 | 
						||
<a name="l31"><span class="ln">31   </span></a>        <span class="s2">.</span><span class="s1">AddJwtBearer</span><span class="s2">(</span><span class="s1">options =></span>
 | 
						||
<a name="l32"><span class="ln">32   </span></a>        <span class="s2">{</span>
 | 
						||
<a name="l33"><span class="ln">33   </span></a>            <span class="s1">options</span><span class="s2">.</span><span class="s1">Authority </span><span class="s2">= </span><span class="s1">domain</span><span class="s2">;</span>
 | 
						||
<a name="l34"><span class="ln">34   </span></a>            <span class="s1">options</span><span class="s2">.</span><span class="s1">Audience </span><span class="s2">= </span><span class="s1">audience</span><span class="s2">;</span>
 | 
						||
<a name="l35"><span class="ln">35   </span></a>            <span class="s1">options</span><span class="s2">.</span><span class="s1">TokenValidationParameters </span><span class="s2">= </span><span class="s0">new </span><span class="s1">TokenValidationParameters</span>
 | 
						||
<a name="l36"><span class="ln">36   </span></a>            <span class="s2">{</span>
 | 
						||
<a name="l37"><span class="ln">37   </span></a>                <span class="s1">ValidateIssuer </span><span class="s2">= </span><span class="s0">true</span><span class="s2">,</span>
 | 
						||
<a name="l38"><span class="ln">38   </span></a>                <span class="s1">ValidateAudience </span><span class="s2">= </span><span class="s0">true</span><span class="s2">,</span>
 | 
						||
<a name="l39"><span class="ln">39   </span></a>                <span class="s1">ValidateLifetime </span><span class="s2">= </span><span class="s0">true</span><span class="s2">,</span>
 | 
						||
<a name="l40"><span class="ln">40   </span></a>                <span class="s1">ValidIssuer </span><span class="s2">= </span><span class="s1">domain</span><span class="s2">,</span>
 | 
						||
<a name="l41"><span class="ln">41   </span></a>                <span class="s1">ValidAudience </span><span class="s2">= </span><span class="s1">audience</span>
 | 
						||
<a name="l42"><span class="ln">42   </span></a>            <span class="s2">};</span>
 | 
						||
<a name="l43"><span class="ln">43   </span></a>            <span class="s1">options</span><span class="s2">.</span><span class="s1">Events </span><span class="s2">= </span><span class="s0">new </span><span class="s1">JwtBearerEvents</span>
 | 
						||
<a name="l44"><span class="ln">44   </span></a>            <span class="s2">{</span>
 | 
						||
<a name="l45"><span class="ln">45   </span></a>                <span class="s1">OnChallenge </span><span class="s2">= </span><span class="s1">context =></span>
 | 
						||
<a name="l46"><span class="ln">46   </span></a>                <span class="s2">{</span>
 | 
						||
<a name="l47"><span class="ln">47   </span></a>                    <span class="s1">context</span><span class="s2">.</span><span class="s1">HandleResponse</span><span class="s2">();</span>
 | 
						||
<a name="l48"><span class="ln">48   </span></a>                    <span class="s1">context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">StatusCode </span><span class="s2">= </span><span class="s5">200</span><span class="s2">;</span>
 | 
						||
<a name="l49"><span class="ln">49   </span></a>                    <span class="s1">context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">ContentType </span><span class="s2">= </span><span class="s3">"application/json"</span><span class="s2">;</span>
 | 
						||
<a name="l50"><span class="ln">50   </span></a>                    <span class="s0">return </span><span class="s1">context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">WriteAsJsonAsync</span><span class="s2">(</span><span class="s0">new </span><span class="s1">ReturnTemplate</span><span class="s2">(</span><span class="s5">401</span><span class="s2">,</span><span class="s3">"你提供了一个错误的Token,所以我们无法验证你的身份,唔......"</span><span class="s2">,</span><span class="s0">null</span><span class="s2">));</span>
 | 
						||
<a name="l51"><span class="ln">51   </span></a>                <span class="s2">}</span>
 | 
						||
<a name="l52"><span class="ln">52   </span></a>
 | 
						||
<a name="l53"><span class="ln">53   </span></a>            <span class="s2">};</span>
 | 
						||
<a name="l54"><span class="ln">54   </span></a>        <span class="s2">});</span>
 | 
						||
<a name="l55"><span class="ln">55   </span></a><span class="s1">builder</span><span class="s2">.</span><span class="s1">Services</span><span class="s2">.</span><span class="s1">AddAuthorization</span><span class="s2">();</span>
 | 
						||
<a name="l56"><span class="ln">56   </span></a>
 | 
						||
<a name="l57"><span class="ln">57   </span></a>
 | 
						||
<a name="l58"><span class="ln">58   </span></a>
 | 
						||
<a name="l59"><span class="ln">59   </span></a><span class="s1">builder</span><span class="s2">.</span><span class="s1">Services</span><span class="s2">.</span><span class="s1">AddControllers</span><span class="s2">();</span>
 | 
						||
<a name="l60"><span class="ln">60   </span></a><span class="s4">// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle</span>
 | 
						||
<a name="l61"><span class="ln">61   </span></a><span class="s1">builder</span><span class="s2">.</span><span class="s1">Services</span><span class="s2">.</span><span class="s1">AddEndpointsApiExplorer</span><span class="s2">();</span>
 | 
						||
<a name="l62"><span class="ln">62   </span></a><span class="s1">builder</span><span class="s2">.</span><span class="s1">Services</span><span class="s2">.</span><span class="s1">AddSwaggerGen</span><span class="s2">();</span>
 | 
						||
<a name="l63"><span class="ln">63   </span></a>
 | 
						||
<a name="l64"><span class="ln">64   </span></a><span class="s1">var app </span><span class="s2">= </span><span class="s1">builder</span><span class="s2">.</span><span class="s1">Build</span><span class="s2">();</span>
 | 
						||
<a name="l65"><span class="ln">65   </span></a>
 | 
						||
<a name="l66"><span class="ln">66   </span></a><span class="s4">// 配置Swagger</span>
 | 
						||
<a name="l67"><span class="ln">67   </span></a><span class="s0">if </span><span class="s2">(</span><span class="s1">app</span><span class="s2">.</span><span class="s1">Environment</span><span class="s2">.</span><span class="s1">IsDevelopment</span><span class="s2">())</span>
 | 
						||
<a name="l68"><span class="ln">68   </span></a><span class="s2">{</span>
 | 
						||
<a name="l69"><span class="ln">69   </span></a>    <span class="s1">app</span><span class="s2">.</span><span class="s1">UseSwagger</span><span class="s2">();</span>
 | 
						||
<a name="l70"><span class="ln">70   </span></a>    <span class="s1">app</span><span class="s2">.</span><span class="s1">UseSwaggerUI</span><span class="s2">();</span>
 | 
						||
<a name="l71"><span class="ln">71   </span></a><span class="s2">}</span>
 | 
						||
<a name="l72"><span class="ln">72   </span></a>
 | 
						||
<a name="l73"><span class="ln">73   </span></a><span class="s1">app</span><span class="s2">.</span><span class="s1">UseHttpsRedirection</span><span class="s2">();</span>
 | 
						||
<a name="l74"><span class="ln">74   </span></a>
 | 
						||
<a name="l75"><span class="ln">75   </span></a><span class="s1">app</span><span class="s2">.</span><span class="s1">UseAuthentication</span><span class="s2">();</span>
 | 
						||
<a name="l76"><span class="ln">76   </span></a>
 | 
						||
<a name="l77"><span class="ln">77   </span></a><span class="s1">app</span><span class="s2">.</span><span class="s1">UseAuthorization</span><span class="s2">();</span>
 | 
						||
<a name="l78"><span class="ln">78   </span></a>
 | 
						||
<a name="l79"><span class="ln">79   </span></a><span class="s4">//自定义中间件 把404变成200</span>
 | 
						||
<a name="l80"><span class="ln">80   </span></a><span class="s1">app</span><span class="s2">.</span><span class="s1">Use</span><span class="s2">(</span><span class="s1">async </span><span class="s2">(</span><span class="s1">context</span><span class="s2">, </span><span class="s1">next</span><span class="s2">) </span><span class="s1">=></span>
 | 
						||
<a name="l81"><span class="ln">81   </span></a><span class="s2">{</span>
 | 
						||
<a name="l82"><span class="ln">82   </span></a>    <span class="s1">await next</span><span class="s2">(); </span><span class="s4">// 先执行后续中间件</span>
 | 
						||
<a name="l83"><span class="ln">83   </span></a>    
 | 
						||
<a name="l84"><span class="ln">84   </span></a>    <span class="s4">// 如果响应是 404 且未修改过</span>
 | 
						||
<a name="l85"><span class="ln">85   </span></a>    <span class="s0">if </span><span class="s2">(</span><span class="s1">context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">StatusCode </span><span class="s2">== </span><span class="s5">404 </span><span class="s2">&& </span><span class="s1">!context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">HasStarted</span><span class="s2">)</span>
 | 
						||
<a name="l86"><span class="ln">86   </span></a>    <span class="s2">{</span>
 | 
						||
<a name="l87"><span class="ln">87   </span></a>        <span class="s1">context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">StatusCode </span><span class="s2">= </span><span class="s5">200</span><span class="s2">; </span><span class="s4">// 改为 200</span>
 | 
						||
<a name="l88"><span class="ln">88   </span></a>        <span class="s1">context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">ContentType </span><span class="s2">= </span><span class="s3">"application/json"</span><span class="s2">;</span>
 | 
						||
<a name="l89"><span class="ln">89   </span></a>        
 | 
						||
<a name="l90"><span class="ln">90   </span></a>        <span class="s4">// 自定义响应内容</span>
 | 
						||
<a name="l91"><span class="ln">91   </span></a>        <span class="s1">await context</span><span class="s2">.</span><span class="s1">Response</span><span class="s2">.</span><span class="s1">WriteAsJsonAsync</span><span class="s2">(</span><span class="s0">new </span><span class="s1">ReturnTemplate</span><span class="s2">(</span><span class="s5">404</span><span class="s2">,</span><span class="s3">"未能找到资源吖!"</span><span class="s2">,</span><span class="s0">null</span><span class="s2">));</span>
 | 
						||
<a name="l92"><span class="ln">92   </span></a>    <span class="s2">}</span>
 | 
						||
<a name="l93"><span class="ln">93   </span></a><span class="s2">});</span>
 | 
						||
<a name="l94"><span class="ln">94   </span></a>
 | 
						||
<a name="l95"><span class="ln">95   </span></a><span class="s4">//控制器路由</span>
 | 
						||
<a name="l96"><span class="ln">96   </span></a><span class="s1">app</span><span class="s2">.</span><span class="s1">MapControllers</span><span class="s2">();</span>
 | 
						||
<a name="l97"><span class="ln">97   </span></a>
 | 
						||
<a name="l98"><span class="ln">98   </span></a><span class="s1">app</span><span class="s2">.</span><span class="s1">Run</span><span class="s2">();</span>
 | 
						||
<a name="l99"><span class="ln">99   </span></a></pre>
 | 
						||
</body>
 | 
						||
</html> |