.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 的路由配置,可解决问题 。

猜你喜欢

转载自blog.csdn.net/weixin_42973143/article/details/83409772