我可以在ASP.Net Web API控制器中使用多个Get方法

时间:2014-11-17 11:10:35

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

我想为Ex:

实现多个Get方法

获取(int id,用户userObj)获取(int storeId,用户userObj)

是否可以像这样实现,我不想更改操作方法名称,因为我需要在URL中键入操作名称。

我正在考虑通过此示例格式“ // localhost:2342 / ”来执行操作方法 其中不包含操作方法名称。

2 个答案:

答案 0 :(得分:6)

基本上你不能这样做,原因是两个方法都有相同的名称和完全相同的签名(相同的参数号和类型),这不会用C#编译,因为C#不允许这样做。

现在,使用Web API,如果你有两个方法具有相同的动作,例如你的例子(两个GET),并且具有相同的签名(int,User),当你试图从客户端点击其中一个时(从Javascript开始)ASp.NET将尝试将传递的参数类型与方法(动作)相匹配,因为它们都具有确切的签名,它将失败并引发关于歧义的异常。

因此,您可以将ActionName属性添加到方法中以区分它们,或者使用Route属性并为方法指定不同的路径。

希望有所帮助。

答案 1 :(得分:3)

您需要将操作名称添加到路由模板,以在 ASP.Net Web API控制器中实现多个GET方法。

<强> WebApiConfig:

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

<强>控制器:

public class TestController : ApiController
{
     public DataSet GetStudentDetails(int iStudID)
     {

     }

     [HttpGet]
     public DataSet TeacherDetails(int iTeachID)
     {

     }
}

注意:操作/方法名称应以&#39; 获取&#39;开头,您需要指定 [HttpGet] 在行动/方法之上