在控制器上新增了一个接口,并在路由器上做了针对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 的路由配置,可解决问题 。