瀏覽標籤:

筆記

[C#][ASP.NET MVC5] 使用Ajax.BeginForm時無法正常運作

在ASP.NET MVC裡面,表單提交方法有兩種,一種是傳統的Html.BeginForm另外一種是利用JQuery實現的Ajax.BeginForm,平常我都是使用Html.BeginForm在處理表單,最近在寫上傳檔案功能的時候想玩Ajax.BeginForm看看,於是乎發生了Ajax無法正常運作的問題,拜了Google大神很久發現了原因是Visual Studio新建專案的時候沒有幫我加入Microsoft jQuery Unobtrusive Ajax這個套件,多虧這個原因讓我撞牆撞了好久,最後裝上去才解決問題。

解決步驟如下:

  1. 對著專案點選右鍵選擇管理NuGet套件
    01
  2. 搜尋unobtrusive找到Microsoft.jQuery.Unobtrusive.Ajax選擇安裝
    02
  3. /App_Start/BundleConfig.cs裡面新增套件
    03

    bundles.Add(new ScriptBundle("~/bundles/jqueryajax").Include(
                "~/Scripts/jquery.unobtrusive-ajax*"));
  4. 在要使用的頁面加入以下語法使用
    @Scripts.Render("~/bundles/jqueryajax")
       

WordPress 新增媒體後顯示 500 – 內部伺服器錯誤

在Windwes Server 2012 R2下安裝Wordpress還滿多東西需要設定的,像是上傳新照片的時候會出現500 - 內部伺服器錯誤

Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 01Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 02

這個問題非常讓人頭痛,詢問了Google小姐一陣子後找到了解答是說,由於IIS沒有權限讀取暫存資料夾C:\Windows\Temp,明明沒有權限讀取此資料夾為什麼又要上傳到這裡呢?難道沒有自己的一個專屬暫存資料夾嗎?
不過既然知道了問題點,解決起來就不是甚麼問題了。

解決方法:

  1. 找到路徑C:\Windows\Temp,編輯IIS_IUSRS使用者,給予該使用者讀取的權限即可。
    Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 03
  2. 這樣就可以正常顯示圖片囉!
    Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 04
       

IIS 網站強制使用 https 加密連線

在這篇 IIS 使用 Let’s Encrypt 的 SSL 免費憑證 – 多站台申請 提到了免費SSL憑證申請,現在我們要申請完後要限制每個網站都只能用https瀏覽的話,就必須用web.config來將使用者自動轉移到https的網址上,廢話不多說教學如下。

  • 在要移轉的網域資料夾下新增檔案web.config,內容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    	<system.webServer>
    		<rewrite>
    			<rules>
    				<rule name="HTTP to HTTPS redirect from:https://blog.exfast.me" stopProcessing="true">
    					<match url="(.*)" />
    					<conditions>
    					  <add input="{HTTPS}" pattern="off" ignoreCase="true" />
    					</conditions>
    					<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
    				</rule>
    			</rules>
    		</rewrite>
    	</system.webServer>
    </configuration>

新增完畢後無須重啟立即生效,現在輸入http網址看看會不會轉跳到https吧!

       

IIS 使用 Let’s Encrypt 的 SSL 免費憑證 – 多站台申請

先前有教大家使用 IIS 使用 Let’s Encrypt 的 SSL 免費憑證 ,不知道各位有沒有發現到若多站台都要申請免費SSL的時候,會發生申請一個憑證另一個站台就會掛掉的問題,現在來教大家怎麼用一個憑證涵蓋全部的站台囉!

這邊可以省略新增web.config的動作,因為程式會自動幫你新增唷!

  1. 對著解壓縮後的資料夾按著Shift+右鍵選擇在此處開啟命令視窗(W)
    圖一
  2. 輸入指令(Help)
    letsencrypt.exe --san

    IIS 使用 Let’s Encrypt 的 SSL 免費憑證 - 多站台申請 - 01

  3. 輸入S產生一個用於複數站台的憑證
    IIS 使用 Let’s Encrypt 的 SSL 免費憑證 - 多站台申請 - 02
  4. 輸入你想要新增的站台編號,範例為:1,2,3,4,5
    IIS 使用 Let’s Encrypt 的 SSL 免費憑證 - 多站台申請 - 03
  5. 完成!

延伸閱讀:IIS 網站強制使用 https 加密連線

       

[WordPress插件] WP Slug Translate 網址自動轉換英文

每次新增文章都會看到中文網址,轉成UTF8編碼的時候就會變成一長串無法閱讀的字串,也會有很多其他問題,所以我去找了個插件讓中文自動轉換為英文,解決這個問題。
插件名稱:WP Slug Translate
設定:

  1. 首先到這裡,訂閱等等要使用的翻譯功能,每個月有200萬次的額度,對於正常使用是非常足夠的。
  2. 接著到這裡,註冊應用程式。
    02
  3. 將剛剛的用戶端識別碼用戶端密碼,依序貼到插件的設定裡面後儲存變更。
    記得將下面的語言修改為zh-CHT唷!這樣才能正常翻譯繁體中文
    01
  4. 撰寫文章時網址還是顯示中文。
    03
  5. 發表後就會自動轉中文囉!
    04
       

Selinux 安全性設定造成php-mysql無法正常連線

今天在測試Google Cloud SQL的時候,明明權限設定沒有問題,但不知為何在我CentOS上面就是無法執行mysql_connect函式,搞了幾個小時,發現又是Selinux安全性在搞鬼,找到問題來源自然好解決。

  1. 取得 selinux 和httpd有關的參數
    getsebool -a | grep 'httpd'

    未命名

  2. 把他打開就可以了
    setsebool httpd_can_network_connect_db 1
       

[C#] 使用 Google Maps Geocoding API 將地址轉換為經緯度

本來是使用Google Map JavaScript API的google.maps.Geocoder,但發現Google似乎有對查詢間隔做限制,Code常常一下可以一下又不行,找了很久終於找到了不錯的C#解決方案,而且似乎沒有任何限制唷!

var address = "台中市沙鹿區台灣大道六段1018號";
var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}", Uri.EscapeDataString(address));

var request = WebRequest.Create(requestUri);
var response = request.GetResponse();
var xdoc = XDocument.Load(response.GetResponseStream());

var result = xdoc.Element("GeocodeResponse").Element("result");
var locationElement = result.Element("geometry").Element("location");
var lat = locationElement.Element("lat");
var lng = locationElement.Element("lng");

如果回傳格式想要是Json的話把requestUri的xml改成json就好囉!

來源:How to call Google Geocoding service from C# code

       

CentOS 7.X fail2ban防止駭客暴力破解密碼

每次看到我的SSH登入LOG都一堆嘗試紀錄,看來真的有很多無聊人士在那邊try我的密碼,就找了fail2ban來防止無聊人士。

 

  1. 安裝fail2ban
    sudo yum install fail2ban
  2. 打開文件/etc/fail2ban/jail.conf設定規則
    搜尋

    [sshd]

    在下方增加

    enabled = true
  3. 搜尋[DEFAULT],設定相關參數
    白名單

    ignoreip = 127.0.0.1/8

    禁止秒數

    bantime  = 3600

    依據秒數(例:在3600秒內錯誤5次則BAN掉)

    findtime = 3600

    嘗試次數

    maxretry = 5
  4. 開啟服務與日後開機自動啟用
    sudo service fail2ban start
    sudo chkconfig fail2ban on

 

補充指令

查詢已ban掉的IP清單

fail2ban-client status sshd

解除ban

fail2ban-client set sshd unbanip IPADDRESS
       

CentOS 7.X 安裝VPN PPTP

  1. 安裝yum第三方EPEL套件庫
    sudo yum install epel-release -y

    清除快取

    sudo yum clean all -y

    更新套件庫

    sudo yum update -y
  2. 安裝PPTP
    sudo yum install ppp pptpd -y

    01

  3. 備份設定擋
    cp /etc/pptpd.conf /etc/pptpd.conf.bak
  4. 打開/etc/pptpd.conf,拉到最下面新增
    localip 10.0.10.1
    remoteip 10.0.10.2-254
  5. 備份設定擋
    cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
  6. 搜尋ms-dns,將前面#去掉如下
    ms-dns 8.8.8.8
    ms-dns 8.8.4.4
  7. 備份設定擋
    cp /etc/sysctl.conf /etc/sysctl.conf.bak
  8. 將下面的設定貼上去
    net.core.wmem_max = 12582912
    net.core.rmem_max = 12582912
    net.ipv4.tcp_rmem = 10240 87380 12582912
    net.ipv4.tcp_wmem = 10240 87380 12582912
    net.core.wmem_max = 12582912
    net.core.rmem_max = 12582912
    net.ipv4.tcp_rmem = 10240 87380 12582912
    net.ipv4.tcp_wmem = 10240 87380 12582912
    net.core.wmem_max = 12582912
    net.core.rmem_max = 12582912
    net.ipv4.tcp_rmem = 10240 87380 12582912
    net.ipv4.tcp_wmem = 10240 87380 12582912
    net.ipv4.ip_forward = 1
  9. 打開/etc/rc.d/rc.local,新增設定
    iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -o eth0 -j MASQUERADE
  10. 設定防火牆
    firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -p tcp --dport 1723 -j ACCEPT
    firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
    firewall-cmd --permanent --direct --add-rule ipv4 filter POSTROUTING 0 -t nat -o eth0 -j MASQUERADE
    firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o eth0 -j ACCEPT
    firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp+ -j ACCEPT
    firewall-cmd --reload
  11. 設定帳號密碼/etc/ppp/chap-secrets
    username pptpd password *
  12. 啟動pptp
    service pptpd start
    chkconfig pptpd on

參考:

  1. CentOS 7 快速部署 PPTP VPN 服務
  2. Setup PPTP Server on CentOS
       

Git 指令 – 常用指令

補充

設定個人資訊

git config --global user.email "[email protected]"
git config --global user.name "sofast"

將推送的預設值更改為把「目前的」branch 推到它的 upstream

git config --global push.default simple

修改遠端來源

git remote set-url origin https://github.com/XXX(username)/YYYY(projectname).git

新建repository

本地目錄下,在命令列裡新建一個代碼倉庫(repository)
裡面只有一個README.md
命令如下:

touch README.md
git init

初始化repository

git add README.md

將README.md加入到緩存區

(可以用git add --a將所有改動提交到緩存(注意是兩個杠))

git commit -m "first commit"

提交改變,並且附上提交資訊”first commit”

Push

git remote add origin https://github.com/XXX(username)/YYYY(projectname).git

加上一個remote的位址,名叫origin,位址是github上的地址(Create a new repo就會有)
因為Git是分散式的,所以可以有多個remote.

git push -u origin master

將本地內容push到github上的那個位址上去。

參數-u
用了參數-u之後,以後就可以直接用不帶參數的git pull從之前push到的分支來pull。

此時如果origin的master分支上有一些本地沒有的提交,push會失敗.

所以解決的辦法是, 首先設定本地master的上游分支:

git branch --set-upstream-to=origin/master

然後pull:

git pull --rebase

最後再push:

git push

分支

新建好的代碼庫有且僅有一個主分支(master),它是自動建立的。
可以新建分支用於開發:

git branch develop master

新建一個叫develop的分支,基於master分支

切換到這個分支:

git checkout develop

現在可以在這個develop分支上做一些改動,並且提交。
注意:切換分支的時候可以發現,在Windows中的repository資料夾中的檔內容也會即時相應改變,變成當前分支的內容。

push方法1:

現在如果想直接Push這個develop分支上的內容到github

git push -u origin

如果是新建分支第一次push,會提示:
fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, use

git push --set-upstream origin develop

輸入這行命令,然後輸入用戶名和密碼,就push成功了。

以後的push就只需要輸入

git push origin

push方法2:

比如新建了一個叫dev的分支,而github網站上還沒有,可以直接:

git push -u origin dev

這樣一個新分支就創建好了。

push方法3:

提交到github的分支有多個,提交時可以用這樣的格式:

git push -u origin local:remote

比如:

git push -u origin master:master

表明將本地的master分支(冒號前)push到github的master分支(冒號後)。
如果左邊不寫為空,將會刪除遠端的右邊分支。

創建分支的另一種方法

用命令

git checkout -b develop2 develop

可以新建一個分支develop2,同時切換到這個分支

刪除分支

可以查看所有的分支

git branch

將develop2分支刪除

git branch -d develop2

Clone

使用git clone+github位址的方法,專案預設只有master分支。git branch也只有master

要看所有的分支:

git branch -a

或者是

git branch -r

這時候要新建一個分支,叫做dev,基於遠端的dev分支:

git checkout -b dev origin/dev

加Tag

git tag tagname develop

git tag中的兩個參數,一個是標籤名稱,另一個是希望打標籤的點develop分支的末梢。

合併分支

git checkout master

先轉到主分支

git merge --no-ff develop

然後把develop分支merge過來

參數意義:
不用參數的預設情況下,是執行快進式合併。
使用參數–no-ff,會執行正常合併,在master分支上生成一個新節點。
merge的時候如果遇到衝突,就手動解決,然後重新add,commit即可。

轉載:在GitHub上管理项目