Web API 一个动作有效,而一个几乎相同的动作却无效?
Web API One action works while a nearly identical one doesn't?
错误信息
{
"Message": "No HTTP resource was found that matches the request URI 'https://localhost:44390/api/UserRoutes?effectiveDate=3/29/2019'.",
"MessageDetail": "No type was found that matches the controller named 'UserRoutes'."
}
工作行动
public class AdvanceOrderApiController : BaseApiController
{
[HttpGet, Route("api/AdvanceOrders")]
public AdvanceOrdersResult GetAdvanceOrdersForRouteDate(string route, DateTime effectiveDate)
{
...
}
}
// JavaScript Usage: route="0100" and effectiveDate="03/29/2019".
API.SendRequest("/api/AdvanceOrders", "GET", { route: route, effectiveDate: effectiveDate }, success, failure);
无效操作
public class UserApiController : BaseApiController
{
[HttpGet, Route("api/UserRoutes")]
public IEnumerable<string> GetUserRoutes(DateTime effectiveDate)
{
...
}
}
// JavaScript Usage: effectiveDate="03/29/2019"
API.SendRequest("/api/UserRoutes", "GET", { effectiveDate: effectiveDate }, success, failure);
WebApiConfig
不确定它是否相关,因为我只是为每个操作声明路线,但是...
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
...
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
API.SendRequest
这个函数只是 jQuery 的 $.ajax
函数的包装器,没什么特别的。如果代码是必需的,我会提供它,但它适用于我所有其他 API 调用,所以我无法想象它会是问题的根源。
这些操作几乎相同,为什么一个有效而另一个无效?
按照 Igor 在评论中所说的那样传递日期会显示一条错误消息,显示我在 Permissions
区域有一个 Api 控制器,该控制器的路线也名为 api/UserRoutes
.
一旦我更改了路线的名称,问题就解决了。
我只是希望它能从一开始就告诉我这条错误消息。
错误信息
{
"Message": "No HTTP resource was found that matches the request URI 'https://localhost:44390/api/UserRoutes?effectiveDate=3/29/2019'.",
"MessageDetail": "No type was found that matches the controller named 'UserRoutes'."
}
工作行动
public class AdvanceOrderApiController : BaseApiController
{
[HttpGet, Route("api/AdvanceOrders")]
public AdvanceOrdersResult GetAdvanceOrdersForRouteDate(string route, DateTime effectiveDate)
{
...
}
}
// JavaScript Usage: route="0100" and effectiveDate="03/29/2019".
API.SendRequest("/api/AdvanceOrders", "GET", { route: route, effectiveDate: effectiveDate }, success, failure);
无效操作
public class UserApiController : BaseApiController
{
[HttpGet, Route("api/UserRoutes")]
public IEnumerable<string> GetUserRoutes(DateTime effectiveDate)
{
...
}
}
// JavaScript Usage: effectiveDate="03/29/2019"
API.SendRequest("/api/UserRoutes", "GET", { effectiveDate: effectiveDate }, success, failure);
WebApiConfig
不确定它是否相关,因为我只是为每个操作声明路线,但是...
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
...
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
API.SendRequest
这个函数只是 jQuery 的 $.ajax
函数的包装器,没什么特别的。如果代码是必需的,我会提供它,但它适用于我所有其他 API 调用,所以我无法想象它会是问题的根源。
这些操作几乎相同,为什么一个有效而另一个无效?
按照 Igor 在评论中所说的那样传递日期会显示一条错误消息,显示我在 Permissions
区域有一个 Api 控制器,该控制器的路线也名为 api/UserRoutes
.
一旦我更改了路线的名称,问题就解决了。 我只是希望它能从一开始就告诉我这条错误消息。