1. 程式人生 > >.NET WEBAPI 錯誤:An error has occurred.

.NET WEBAPI 錯誤:An error has occurred.

在控制器上新增了一個介面,並在路由器上做了針對Action 的路由之後,發現舊介面突然不能使用,Azure 服務上的錯誤日誌寫的是:

Http Action - Response from host 'XXXXXXXXXXX.com.cn': 'InternalServerError' Response Headers: Pragma: no-cache
Cache-Control: no-cache
Date: Thu, 25 Oct 2018 06:00:20 GMT
Set-Cookie: ARRAffinity=e1d887ee8262c10749997b5445c0c501b10cea1ba9dbf4998d85679550581d41;Path=/;HttpOnly;Domain=XXX.XXXX.XXXX..XX.CN.COM.CCC.XXXX
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
 Body: {"Message":"An error has occurred."}

查閱資料後知道該問題的產生是由於介面的路由配置有問題,存在相同引數的路由,因為預設路由是:

 config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

當通過查詢到多個相同引數的方法時候,就不會去查詢Action 的Name,因此產生多個方法,伺服器不確定使用哪一個,因此無法正確執行方法的內容,因此,可以將方法刪掉保留,之後的方法使用:

 config.Routes.MapHttpRoute(
                name: "ActionApi",
                routeTemplate: "actionapi/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

或者可以直接刪除之前的方法,統一使用帶有Action 的路由配置,可解決問題 。