gpt4 book ai didi

c# - 找到与请求 (GET) 匹配的多个操作

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:18 25 4
gpt4 key购买 nike

我在我的 Controller 中定义了 2 个 GET 方法,一个名为“Favorites”,另一个名为“Get”。在我的路由中,我专门将不同的 URL 路由映射到这两种不同的方法。

但是,当我点击/Api/MockUsers/Get?userId=2 时,出现以下错误:

Multiple actions were found that match the request

但是,当我点击/api/MockUsers/1/favorites 时,它会返回数据。

我很困惑,因为我似乎专门将/Api/MockUsers/Get?userId=2 路由到 ACTION“Get”,而不是“Favorites”,那么为什么 MvC4 会感到困惑?

这是我的路线的样子:

routes.MapHttpRoute(
name: "Users",
routeTemplate: "api/MockUsers/{id}/favorites",
defaults: new { controller = "MockUsers", action = "Favorites", id = 1 }
);

routes.MapHttpRoute(
name: "Api_Get",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Get", id = RouteParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);

在我的 Controller 中,我有两种方法:

[AcceptVerbs("GET")]
public UserFavorite Favorites(long id)
{
Favorite f = new Favorite(1, "Favorite 1", "Favorite Type 1");
UserFavorite userFavorite = new UserFavorite(1, f);

return userFavorite;
}

public User Get(long userId)
{
User u = _mockusersService.GetUser(userId);
return u;
}

最佳答案

您可以使用默认的 Webapi 路由来执行此操作,但要更改您的查询方式。WebApiConfig.cs 中的默认路由:

configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });

假设 webapi Controller 命名为 MockUsers,示例调用的行为如下:

GET /Api/MockUsers?userId=2444 -->将解析为以 userId 作为参数(您的 Get 方法端点)的 GET 方法。

GET /Api/MockUsers?id=23444 -->将解析为以 Id 作为参数(您最喜欢的方法端点)的 GET 方法。

关于c# - 找到与请求 (GET) 匹配的多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com