gpt4 book ai didi

c# - Web API 路由被忽略

转载 作者:行者123 更新时间:2023-11-30 17:05:42 25 4
gpt4 key购买 nike

我定义了这两条路线:

routes.MapRoute(
name: "GetVoucherTypesForPartner",
url: "api/Partner/{partnerId}/VoucherType",
defaults: new { controller = "Partner", action = "GetVoucherTypesForPartner"}
);

routes.MapRoute(
name: "Default",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional}
);

在我的 PartnerProfile Controller 中,我有 2 个方法:

public Partner Get(string id)
{ }

public IEnumerable<string> GetVoucherTypesForPartner(string id)
{ }

如果我点击 url ~/api/Partner/1234 然后,正如预期的那样,将调用 Get 方法。
但是,如果我点击 url ~/api/Partner/1234/VoucherType,则会调用相同的 Get 方法。我期待我的 GetVoucherTypesForPartner 被调用。

我很确定我的路线设置有问题...

最佳答案

您似乎映射了标准 MVC 路由,而不是 Web API 路由。有很大的不同。标准路由由派生自 Controller 类的 Controller 使用,但如果您使用的是 ASP.NET Web API,并且您的 Controller 派生自 ApiController 类型,那么您应该定义 HTTP 路由。

您应该在您的 ~/App_Start/WebApiConfig.cs 中而不是在您的 ~/App_Start/RouteConfig.cs 中执行此操作。

所以继续吧:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "GetVoucherTypesForPartner",
routeTemplate: "api/Partner/{partnerId}/VoucherType",
defaults: new { controller = "Partner", action = "GetVoucherTypesForPartner" }
);

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

然后:

public class PartnerController : ApiController
{
public Partner Get(string id)
{
...
}

public IEnumerable<string> GetVoucherTypesForPartner(string partnerId)
{
...
}
}

注意事项:

  • 我们定义的 HTTP 路由不是标准的 MVC 路由
  • GetVoucherTypesForPartner 操作采用的参数必须称为 partnerId 而不是 id 以尊重您的路由定义并避免任何混淆

关于c# - Web API 路由被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16194588/

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