在 ASP.NET Web API 使用 [Route]、[HttpPost]、[HttpDelete] 等屬性路由時,開發者常嘗試在瀏覽器地址欄輸入 URL 測試 POST/DELETE 端點,卻收到 404 或 405 錯誤。這並非路由配置錯誤,而是瀏覽器地址欄只能發起 GET 請求的機制限制。
[HttpGet] 匹配成功;[HttpPost]/[HttpDelete] 拒絕非對應動詞,返回 405 Method Not Allowed(或因無 GET 版本路由返回 404)。| 工具/方式 | 適用場景 | 示例 |
|---|---|---|
| Postman / Insomnia | 最推薦,圖形化構造任意請求 | POST https://localhost:port/api/values Body: JSON |
| curl | 命令行快速驗證 | curl -X POST -H "Content-Type: application/json" -d '{"id":2}' https://localhost:port/api/values |
| HttpClient / HttpWebRequest | 代碼級集成測試 | C# 編寫單元測試調用端點 |
| Swagger / Swashbuckle | API 文檔與在線測試一體化 | 啟用 Swagger UI,頁面直接發送 POST/DELETE |
| 瀏覽器開發者工具 Console | 前端聯調時 | fetch('/api/values', {method:'POST', body:JSON.stringify({id:2})}) |
ApiController。[HttpPost]/[HttpDelete] 或 [AcceptVerbs("POST")]。[Route("api/values/{id}")]。WebApiConfig.Register 中調用 config.MapHttpAttributeRoutes()。RoutePrefix 衝突導致路徑錯位。瀏覽器地址欄 ≠ API 測試工具。請使用 Postman、curl 或 Swagger UI 進行非 GET 請求的驗證,這是 Web API 開發的基本功。