gpt4 book ai didi

asp.net-mvc - asp.net mvc web api 同一个 Controller 不同的函数参数

转载 作者:行者123 更新时间:2023-12-02 05:28:41 24 4
gpt4 key购买 nike

在我的 Controller UserApiController 中,我有以下功能:

public object GetUsers(string CountryID, string StateID)
{
//biz
}

public object GetPositions(int CompanyID, int DepartmentID)
{
//biz
}

在我的 Controller SalesApiController 中,我有以下功能:

public object GetOrders(string CountryID, int CompanyID)
{
//biz
}

public object GetProducts(string CountrID, string StateID, int CompanyID)
{
//biz
}

在 web api 配置中,我可以这样映射:

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{CountryID}/{StateID}",
defaults: new { }

它适用于 UserApiController.GetUsers,因为函数签名仅与 GetUsers 匹配。

现在,问题:

1.如何定义一个路由来处理具有相同数量参数的不同函数(在相同或不同的 Controller 中)

2.如何定义一个路由来处理具有不同数量参数的不同函数(如果可能,在相同或不同的 Controller 中)

最佳答案

1.how to define a route to handle different functions with same amount of parameters (either within same or different controller)

这里有几种解决方案。

  • 使用多条路线。以您的 UserApiController 为例,很难有一条路线适用于 2 个操作,其中它们具有不同的参数名称。我建议添加以下 2 条路线:

        config.Routes.MapHttpRoute(
    name: "DefaultApi-UserApiGetUsers",
    routeTemplate: "api/{controller}/GetUsers/{CountryID}/{StateID}",
    defaults: new { action = "GetUsers" });

    config.Routes.MapHttpRoute(
    name: "DefaultApi-UserApiGetPositions",
    routeTemplate: "api/{controller}/GetPositions/{CompanyID}/{DepartmentID}",
    defaults: new { action = "GetPositions" });
  • 按照 danludwig 的建议使用查询字符串参数。这样,您只需要这条路线:

        config.Routes.MapHttpRoute(
    name: "DefaultApiOnlyRoute",
    routeTemplate: "api/{controller}/{action}");
    1. api/UserApi/GetUsers?CountryID=USA&StateID=WA
    2. api/UserApi/GetPositions?CompanyID=123&DepartmentID=456

2.how to define a route to handle different functions with different amount of parameters (either within same or different controller, if possible)

  • 同样,定义多个路由:

        config.Routes.MapHttpRoute(
    name: "DefaultApi-SalesApi2Params",
    routeTemplate: "api/{controller}/{action}/{CountryID}/{CompanyID}");

    config.Routes.MapHttpRoute(
    name: "DefaultApi-SalesApi3Params",
    routeTemplate: "api/{controller}/{action}/{CountryID}/{StateID}/{CompanyID}");
  • 改用查询字符串参数并且只有一个路由——即上面的“DefaultApiOnlyRoute”。

    1. api/SalesApi/GetOrders?CountryID=USA&CompanyID=123
    2. api/SalesApi/GetProducts?CountryID=USA&StateID=WA&CompanyID=123

希望这对您有所帮助。

关于asp.net-mvc - asp.net mvc web api 同一个 Controller 不同的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12707408/

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