MVC
Articles
NLog的Log等級
使用等級區分有個好處,就是可以依據嚴重程度或被觸發到的機率,考慮是紀錄到DB就好還是要發送email。
首先要確定在config設定檔內rule的設定,可以參考以下:
<rules>
<logger name="*" minlevel="Trace" writeTo="database" />
<logger name="*" minlevel="Trace" writeTo="f"...
0
minutes
NLog寄送電子郵件與紀錄事件檢視器
如標題,這個夠犀利了,主要是設定target。
電子郵件
<!-- 寄送 電子郵件 的設定 -->
<target name="email" xsi:type="Mail"
smtpServer="192.168.1.1"
smtpPort="25"
smtpAuthentication="Basic"
smtpUserName="帳號"
smtpPassword="密碼"
enableSsl="false"
from="hello@abc.com.tw"
to="admin@abc.com.tw"
html="true"
encoding="UTF-8"
addNewLines="true"
subject="不好了!!!${machinename} 於 ${shortdate} ${time} 產生 ${level} 等級的錯誤。"
header="##########################################################################"
body="${newline}
時間:${longdate} ${newline}${newline}
等級:${level:uppercase=true} ${newline}${newline}
紀錄者:${logger} ${newline}${newline}
來源:${callsite:className=true} ${newline}${newline}
Exception類:${exception:format=type} ${newline}${newline}
錯誤訊息:${message} ${newline}${newline}"
footer="##########################################################################"
/>
newline對html而言是沒有作用的,會擠成一坨,可以在加入以下(讓config使用<br>換行)
<br>...
0
minutes
Nlog的紀錄改寫到資料庫中
承接上篇,NLog的紀錄可以改寫到資料庫中的,另外Nlog.config檔案也可以與Web.config合併喔,首先進行合併,把Nlog.config的內容除了<?xml....utf-8"?>不要複製外,把內容貼到Web.config的</configuration>之前,然後跑跑看測試,當然跑不出來囉,這是因為Web.config不認識nlog的標籤,只要在<configSections>標籤下多加入一個<section即可,如下:
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
這樣就可以運作了,不過記得資料庫要開Table,語法如下:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE . (
IDENTITY(1,1) NOT NULL,
...
1
minute
介紹兩個好用的log套件
以往開發程式一定要處理log的問題,不然還真的不知道該怎麼去抓蟲。log有幾種常見的方式,寫檔案、寫到資料庫或是寫入事件檢視器中,其實在Visual Studio工具中,只要用NuGet就可以非常簡單的方式開始記錄log,以下文章是介紹最好用的四種Log套件,可以參考看看:
https://www.codeproject.com/Articles/1278018/Best-Logging-libraries-for-ASP-NET-MVC
筆者推薦兩套,原因如下:
推薦Elmah:只要網站發生任何錯誤導致有error,就會寫log(不用在程式碼裡面特別去寫要記錄log)。IIS的error頁面要localhost端才看得到,但又不見得可以重現,所以有這個之後會方便許多。推薦NLog :紀錄log還有一種情況,例如登入登出的紀錄,這個就不適合用Elmah拉,小而巧的 NLog 與 Log4Net 就很適合,兩套都不錯且有大量粉絲,對Log都能進行分級(一般紀錄「Debug、Info、Warn」、嚴重紀錄「Error、Fatal」),也都能紀錄到資料庫中, 而推薦NLog 的原因,是因為用的人好像比較多一些。
Elmah安裝教學
用NuGet下載 Elmah.Mvc,下載完成後 https://localhost:44345/elmah 就可以看到重大錯誤的log紀錄了,但是因為是放在記憶體中,網站關掉就沒有了。在用NuGet下載 elmah.sqlserver 。修改Web.config 會發現多了一段 <add name="elmah-sqlserver" .........> 把正確的SqlServer設定上去,或是砍掉這段用既有的,但是要修改<errorLog type="Elmah.SqlErrorLog, Elmah"connectionStringName="正確連線名稱"/>執行專案下 ~App_ReadmeElmah.SqlServer.sql 建立資料表,執行完成後,目錄 ~App_Readme...
2
minutes
ASP.NET MVC是透過網址的路由來定義拜訪
網址路由(Routing),全部頁面被 /App_Start/RouteConfig.cs 導向(當然可以自己定義路由), MVC的Controllers與WebApi分別是用以下兩個檔案控制:
/App_Start/RouteConfig.cs
/App_Start/WebApiConfig.cs
可能會有困惑,以上兩者的差異為{action},那WebApi到底要不要有Aciton比較好呢?其實JSON原理是用不同的傳輸協定去Call不同的方法,例如Get、Post、Put,沒有{action}是符合設計原理的,但是有時候這樣又不太好用,那到底要不要改掉WebApiConfig.cs呢?
config.Routes.MapHttpRoute(
...
0
minutes
MVC網站的AD登入驗證
登入驗證可以用資料庫帳密、AD(網域驗證),當然也可以用微軟自家的Azure AD,但是一般開發大多以前兩者為多拉,本篇文章以AD驗證為示範。
Web Form的AD驗證比較簡單,只要修改Web.config,在<connectionStrings></connectionStrings>區間加入以下資料:
<add name="ADConnectionString" connectionString="LDAP://AD主機位置/DC=網域URL第一段,DC=網域URL第二段" />
然後在<system.web></system.web>加入以下:
<membership defaultProvider="AbcAD">
<providers>
<add name="AbcAD" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
</providers>
</membership>
<authentication mode="Forms">
<forms loginUrl="~/Login" defaultUrl="~/Default" />
</authentication>
<authorization>
<deny...
2
minutes