﻿# Windows / .NET / ASP.NET 的路徑、檔名長度限制

最近公司替客戶做了一個部落格網站，但上線後遇到一個奇特的問題，就是當網址過長時會導致 IIS 回應 Bad Request (Invalid URL) 的錯誤訊息（如下圖）。

 ![當網址過長時會導致 IIS 回應 Bad Request (Invalid URL) 的錯誤訊息](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d726e9dc6b05077a2025-image_8.png)

由於網頁的網址都是透過 URL Rewrite 的方式處理，所以幾乎每一個頁面都用路徑 + 檔名的方式顯示，幾乎很少使用 QueryString，文章的標題直接會被 UrlEncode 過當成檔名顯示(副檔名為 .aspx)。

因此當有人輸入的文章標題過長時，就會導致 IIS 回應我 HTTP 400 Bad Request 網頁完全無法顯示，我算了一下這個壞掉的網址共有 285 個字元，不過我個人的印象中，IE 可接受的網址長度應該不只這些吧。

我因此上網搜尋了[一些資訊](http://forums.iis.net/p/1105360/1689747.aspx#1689747)但問題似乎傾向於無解的。即便是無解，也要瞭解「限制」在哪裡，這樣才能避免問題再次發生。如果你的網址長這樣：

```
http://blog.miniasp.com/xxxxxxxxxxxxxxxx ... xxxxx/xxx.aspx
```

如上網址範例，紅色的部分(Path + Filename)總長度不得超過 260 個字元，否則 ASP.NET 就會無法回應網頁，而這限制是從 .NET Framework 來的，而 .NET Framework 的限制來自於「作業系統」的限制，而作業系統的限制如下：

-   Windows XP 的檔案長度限制為 255 bytes
-   Windows Vista 的檔案長度限制為 260 bytes

各位不知道有沒有遇過在整理檔案時，若路徑過長、檔名即便只有一點點，一樣沒辦法複製或儲存，就是這個道理。像是上上週去參加李智樺(Ruddy Lee)的**介紹如何在微軟新一代服務平台建立雲端應用程式**時拿到老師的一張光碟，老師那時候就先說「光碟可能會壞掉」，但我拿回來 Copy 到硬碟時果然遇到有些檔案無法複製，最後也是查出原來是光碟的目錄太長了，原本光碟的資料是在 E:\\ 但是複製到我的硬碟時又多了幾層子目錄，導致真的有些檔案超出長度限制而無法複製！

我在測試 ASP.NET 的時候發現不管是在 Windows Server 2003 或 Windows XP 限制都是 260 個字元，我想這應該是在 .NET Framework 中的限制吧 (不是十分肯定)。

總之，日後在開發 Web 應用程式時這也是另一個需要考量的因素了，即便這是個很罕見的錯誤，會像我一樣把網址搞的這麼長的應該不多啦。不過，近日 [SEO](http://en.wikipedia.org/wiki/Search_engine_optimization) ([搜尋引擎最佳化](http://zh.wikipedia.org/wiki/%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E%E6%9C%80%E4%BD%B3%E5%8C%96)) 的議題十分的夯，其中對於網址的 SEO 優化也是蠻常見的，以後一定要多注意網址的長度不可大於 260 個字元！

**相關連結**

-   [Thread: ASP.NET 2.0 maximum URL length?](http://forums.iis.net/p/1105360/1689747.aspx#1689747)
-   [Limitations With Long File Names on Windows \[Must Read for Podcasters\]](http://labnol.blogspot.com/2006/10/limitations-with-long-file-names-on.html)
