【问题标题】:WebApi 500 Internal Server ErrorWebApi 500 内部服务器错误
【发布时间】:2015-08-07 10:07:28
【问题描述】:

我正在尝试使用 WebApi,并使用两种方法创建了一个控制器。

我先从以下方法入手:

    [HttpGet]
    [Route("car/{registration}")]
    public object GetCarByRegistration(string registration) {
        return null;
    }

调试时我在return null; 测试的url http://localhost:51245/api/car/yw25jdk 上设置了一个断点,它工作正常,Visual Studio 在我的断点处停止并且registration 变量在url 中是相同的值。

但是当我添加以下方法时:

    [HttpGet]
    [Route("car/{serial}")]
    public object GetCarBySerial(string serial) {
        return null;
    }

第一个网址停止工作,我开始收到500 - Internal Server Error。如果我把第二种方法拿出来,那么第一种方法就会再次起作用。

我不明白为什么第二种方法会破坏第一种方法。

谁能给我解释一下?

【问题讨论】:

  • 路线相同。

标签: c# asp.net asp.net-web-api


【解决方案1】:

那是因为当您访问 url http://localhost:51245/api/car/yw25jdk 时 ASP 不知道使用哪种方法,因为这两种方法都说它们期望一个字符串作为它们的参数。

ASP 应该如何知道/car/{registration}/car/{serial] 之间的区别,因为它们都是字符串?

你应该改变他们的路线,让它工作

【讨论】:

  • duhh,我觉得很傻,现在很明显。感谢您的解释。
【解决方案2】:

把它放在你的 WebApiConfig 中:

 config.MapHttpAttributeRoutes();

否则 WebApi 会忽略 Route 属性。如果没有不同的路由签名,当 ApiController 收到 GET 请求时,它会自动查找以 'Get' 开头的第一个操作 - 这就是当您删除第二个方法时它起作用的原因

【讨论】:

  • 他可能有这个。因为它只与其中一个合作。路线完全相同的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 2011-10-17
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多