我正在尝试使用WebApi并使用两种方法创建了一个控制器。
我首先使用以下方法开始:
[HttpGet]
[Route("car/{registration}")]
public object GetCarByRegistration(string registration) {
return null;
}
调试时,我在return null;
测试的网址http://localhost:51245/api/car/yw25jdk
上设置了一个断点,该工作正常,可视工作室停在断点处,registration
变量在网址中的值相同。
但是当我添加以下方法时:
[HttpGet]
[Route("car/{serial}")]
public object GetCarBySerial(string serial) {
return null;
}
第一个网址停止工作,我开始获得500 - Internal Server Error
。如果我采用第二种方法,那么第一种方法再次起作用。
我无法理解为什么第二种方法会破坏第一种方法。
有人能解释一下吗?
答案 0 :(得分:7)
那很好,因为当你转到网址http://localhost:51245/api/car/yw25jdk
时,ASP不知道使用哪种方法,因为两种方法都说他们希望将字符串作为参数。
ASP如何知道/car/{registration}
和/car/{serial]
之间的区别,因为它们都是字符串?
您应该更改它们的路线,以使其正常工作
答案 1 :(得分:0)
将其放入您的WebApiConfig:
config.MapHttpAttributeRoutes();
否则WebApi会忽略Route属性。如果没有不同的路由签名,当ApiController收到 GET 请求时,它会自动查找以' Get'开头的第一个操作。 - 这就是当你删除第二种方法
时它的工作原理