Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
言
在ASP.Net Core2.X調(diào)用的CreateWebHostBuilder和3.X的主要區(qū)別在于WebHost的調(diào)用,CreateDefaultBuilder被Host替換,另一個(gè)區(qū)別是對(duì)ConfigureWebHostDefaults()的調(diào)用;
由于新的主機(jī)生成器是通用主機(jī)生成器,因此我們也需要知道默認(rèn)Web主機(jī)配置默認(rèn)配置了什么.ConfigureWebHostDefaults為我們默認(rèn)做了哪些配置?我們一起來(lái)看看他為我們默認(rèn)配置的HostFiltering,HostFilteringMiddleware,其實(shí)他做的是對(duì)請(qǐng)求主機(jī)頭的限制,也相當(dāng)于一個(gè)請(qǐng)求主機(jī)頭白名單,標(biāo)識(shí)著某些主機(jī)頭你可以訪問(wèn),其余的你別訪問(wèn)了我這邊未允許.
如何使用
在這之初打算的是為給大家分享一下如何配置;算了,我們一起開(kāi)拓一下思維看看他是如何做的這個(gè)中間件吧.順便再說(shuō)說(shuō)當(dāng)我們使用ASP.NET Core在我們使用中如何配置,使用主機(jī)頭白名單
services.PostConfigure<HostFilteringOptions>(options=>
{
if (options.AllowedHosts==null || options.AllowedHosts.Count==0)
{
// "AllowedHosts": "localhost;127.0.0.1;[::1]"
var hosts=Configuration["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
// Fall back to "*" to disable.
options.AllowedHosts=(hosts?.Length > 0 ? hosts : new[] { "*" });
}
});
HostFilteringOptions
在Configure方法中添加HostFiltering中間件
public void Configure(Microsoft.AspNetCore.Builder.IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHostFiltering();
app.Run(context=>
{
return context.Response.WriteAsync("Hello World! " + context.Request.Host);
});
}
appsettings.json
{
"AllowedHosts": "127.0.0.1"
}
這樣就好了,那么我們?cè)賮?lái)測(cè)試一下看看.
源碼解析
/// <summary>
/// Processes requests
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public Task Invoke(HttpContext context)
{
var allowedHosts=EnsureConfigured();//獲取允許Host集合
if (!CheckHost(context, allowedHosts))//判斷當(dāng)前Host是否在允許的Host集合中
{
return HostValidationFailed(context);//如果不在400
}
return _next(context);//繼續(xù)走下一個(gè)中間件
}
private Task HostValidationFailed(HttpContext context)
{
context.Response.StatusCode=400;
if (_options.IncludeFailureMessage)
{
context.Response.ContentLength=DefaultResponse.Length;
context.Response.ContentType="text/html";
return context.Response.Body.WriteAsync(DefaultResponse, 0, DefaultResponse.Length);
}
return Task.CompletedTask;
}
private IList<StringSegment> EnsureConfigured()
{
if (_allowAnyNonEmptyHost==true || _allowedHosts?.Count > 0)//判斷配置是否為空
{
return _allowedHosts;
}
return Configure();
}
private IList<StringSegment> Configure()
{
var allowedHosts=new List<StringSegment>();
if (_options.AllowedHosts?.Count > 0 && !TryProcessHosts(_options.AllowedHosts, allowedHosts))
{
_logger.WildcardDetected();
_allowedHosts=allowedHosts;
_allowAnyNonEmptyHost=true;
return _allowedHosts;
}
if (allowedHosts.Count==0)//至少一個(gè)Host
{
throw new InvalidOperationException("No allowed hosts were configured.");
}
if (_logger.IsEnabled(LogLevel.Debug))
{
_logger.AllowedHosts(string.Join("; ", allowedHosts));
}
_allowedHosts=allowedHosts;
return _allowedHosts;
}
總結(jié)
這篇文章主要也許能給大家開(kāi)闊一下思維,其實(shí)他的實(shí)現(xiàn)邏輯很簡(jiǎn)單,當(dāng)我們請(qǐng)求帶著Host頭去訪問(wèn)的時(shí)候,通過(guò)該中間件判斷該Host頭是否在我們預(yù)先配置好的里面,如果在里面那么就繼續(xù)請(qǐng)求下一個(gè)中間件,如果說(shuō)不在那么不好意思400
PI
來(lái)源:快舔包我很肥
框架
WebAPI Contrib:幫助你提高 ASP.NET Web API 能力的開(kāi)源項(xiàng)目集合。
應(yīng)用框架(Application Frameworks)
應(yīng)用模板(Application Templates)
人工智能(Artificial Intelligence)
程序集處理(Assembly Manipulation)
資源(Assets)
認(rèn)證和授權(quán)(Authentication and Authorization)
自動(dòng)構(gòu)建(Build Automation)
緩存(Caching)
CLI
CLR
CMS
代碼分析和度量(Code Analysis and Metrics)
編譯器(Compiler)
壓縮(Compression)
持續(xù)集成(Continuous Integration)
加密(Cryptography)
數(shù)據(jù)庫(kù)(Database)
數(shù)據(jù)庫(kù)驅(qū)動(dòng)(Database Drivers)
反編譯(Decompilation)
部署(Deployment)
DirectX
分布式計(jì)算(Distributed Computing)
文檔(Documentation)
電子商務(wù)和支付(E-Commerce and Payments)
環(huán)境管理(Environment Management)
ETL
游戲(Game)
地理信息系統(tǒng)(Gis)
Git工具(Git Tools)
圖形(Graphics)
GUI
HTML 和 CSS(HTML and CSS)
HTTP
IDE
圖像處理(Image Processing)
安裝工具(Install Tools)
國(guó)際化(Internationalization)
互操作(Interoperability)
IoC
日志(Logging)
機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)(Machine Learning and Data Science)
Markdown 處理(Markdown Processors)
郵件(Mail)
數(shù)學(xué)(Mathematics)
多媒體(Media)
度量(Metrics)
微框架(Micro Framework)
雜項(xiàng)(Misc)
MVVM
Office
ORM
包管理(Package Management)
Profiler
推送通知(Push Notifications)
隊(duì)列(Queue)
響應(yīng)式編程(Reactive Programming)
計(jì)劃調(diào)度(Scheduling)
SDK 和 API 客戶端(SDK and API Clients)
搜索(Search)
序列化(Serialization)
狀態(tài)機(jī)(State machines)
靜態(tài)網(wǎng)站生成(Static Site Generators)
風(fēng)格指南(Style Guide)
模板引擎(Template Engine)
測(cè)試(Testing)
交易(Trading)
Visual Studio 插件(Visual Studio Plugins)
Web 框架(Web Frameworks)
Web 服務(wù)器(Web Servers)
WebSocket
Windows 服務(wù)(Windows Services)
通訊框架(Communication Frameworks)
其他列表(Other Lists)
看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人!!!歡迎大家點(diǎn)贊,留言討論,喜歡這篇文章可以分享給更多人,關(guān)注我每天更新分享有關(guān)程序員、科技、編程之類的文章!!!愛(ài)你們,,么么噠,,讓我們一起愉快的玩耍把!!!
spcms,是完全開(kāi)源的一套CMS建站系統(tǒng),主要面向個(gè)人或者企業(yè)進(jìn)行快速的建造簡(jiǎn)潔,高效,易用,安全的網(wǎng)站,Aspcms讓一般的開(kāi)發(fā)人員就能夠使用Aspcms以最低的成本、最少的人力投入在最短的時(shí)間內(nèi)架設(shè)一個(gè)功能齊全、性能優(yōu)異的網(wǎng)站。Aspcms是基于ASP+Access(sql2000)開(kāi)發(fā)的網(wǎng)站內(nèi)容管理系統(tǒng),提供了簡(jiǎn)介類模塊,新聞?lì)惸K,產(chǎn)品類模塊,圖片類模塊,下載類模塊。站長(zhǎng)在使用過(guò)程中可選擇任意模塊來(lái)建設(shè)自己的網(wǎng)站。
Aspcms的適用性:充分考慮網(wǎng)站搭建的實(shí)際需要,確保功能上較強(qiáng)的實(shí)用性。Aspcms易用性:用戶界面簡(jiǎn)潔、美觀、友好,易于用戶操作和使用,操作人員只需簡(jiǎn)單學(xué)習(xí)即可掌握,降低學(xué)習(xí)成本。Aspcms的安全性:安全可靠的權(quán)限劃分,既考慮信息的共享,又注意信息的保護(hù)與隔離。
Aspcms搭建的網(wǎng)站可以一鍵生成html,自動(dòng)完成地圖生成;RSS生成,并且Aspcms還可以URL自定義,同時(shí)Aspcms增加按指定日期生成內(nèi)容的功能。并且Aspcms搭建的站點(diǎn)可以自定義生成目錄、文件名稱,站長(zhǎng)可以自己分類自定義模板、內(nèi)容自定義模板、分類訪問(wèn)權(quán)限控制。
Aspcms能夠自動(dòng)一鍵切換模板,并且還有模板防盜功能,進(jìn)行在線修改模板,CSS文件。Aspcms的功能點(diǎn):采集功能、TAG功能、批量添加分類功能、水印功能、留言,評(píng)論內(nèi)容過(guò)濾功能。Aspcms自動(dòng)在線升級(jí)再加上了事件郵件提醒。
站長(zhǎng)可以自定義標(biāo)簽和展示位管理,并且站長(zhǎng)可以無(wú)限極分類,站長(zhǎng)可以通過(guò)Aspcms自定義標(biāo)題、自定義關(guān)鍵詞、自定義描述。網(wǎng)站的欄目,分類是否啟用開(kāi)關(guān),加上對(duì)外部跳轉(zhuǎn)鏈接、友情鏈接控制,站長(zhǎng)可以上傳文件管理,數(shù)據(jù)庫(kù)備份/恢復(fù),幻燈片等網(wǎng)站常用功能,并且可以對(duì)冗余文件檢測(cè)功能,可以檢測(cè)無(wú)用的上傳文件并刪除,這樣就可以對(duì)Aspcms網(wǎng)站進(jìn)行全方位的管理。
給大家分享一下使用Aspcms搭建網(wǎng)站的方法:
首先,在本地主機(jī)上安裝IIS服務(wù);
IIS服務(wù)安裝好后,進(jìn)入IIS管理器;
點(diǎn)擊IIS管理器中的asp選項(xiàng),將將錯(cuò)誤發(fā)生到瀏覽器和啟用父路徑后面的選項(xiàng)修改為True;
進(jìn)入高級(jí)設(shè)置選項(xiàng),在物理路徑中添加網(wǎng)站文化的保存路徑;
最后,在瀏覽器中輸入localhost即可訪問(wèn)網(wǎng)站;
Aspcms對(duì)環(huán)境的要求極低、凡支持IIS的空間或服務(wù)器均可運(yùn)行,只需要上傳程序到你的網(wǎng)站根目錄中(注意:不支持二級(jí)目錄),然后修改網(wǎng)站目錄下的數(shù)據(jù)庫(kù)目錄(Aspcms_data)的權(quán)限,增加Internet 來(lái)賓帳戶的修改寫入權(quán)限。這樣一個(gè)Aspcms的網(wǎng)站就可以很快速的搭建起來(lái)了,是不是非常的簡(jiǎn)單呢。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。