我想实现多个获取方法,例如:我可以有多个Get方法在ASP.Net的Web API控制器
获取(INT ID,用户userObj)和获取(INT STOREID,用户userObj )
是否可以像这样实现,我不想更改操作方法名称,因为在这种情况下我需要在URL中输入操作名称。
我正在考虑通过此示例格式'// localhost:2342/' ,其中不包含操作方法名称。
我想实现多个获取方法,例如:我可以有多个Get方法在ASP.Net的Web API控制器
获取(INT ID,用户userObj)和获取(INT STOREID,用户userObj )
是否可以像这样实现,我不想更改操作方法名称,因为在这种情况下我需要在URL中输入操作名称。
我正在考虑通过此示例格式'// localhost:2342/' ,其中不包含操作方法名称。
基本上你不能这样做,原因是这两种方法有相同的名称和完全相同的签名(相同的参数号和类型),这不会用C#编译,因为C#不允许这样做。
现在,使用Web API,如果您有两个方法与您的示例(均为GET)具有相同的操作,并且具有相同的签名(int,User),当您尝试从客户端中击中其中一个(比如来自Javascript),ASp.NET会尝试将传递的参数类型与方法(动作)进行匹配,并且由于两者都具有确切的签名,它将失败并引发关于歧义的异常。
因此,您可以将ActionName属性添加到您的方法中以区分它们,或者使用Route属性并为您的方法提供不同的路线。
希望有所帮助。
感谢您的建议.... –
请亲切看我的[问题](https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208
您需要行动名称添加到路径模板以实现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)
{
}
}
注:动作/方法名应startwith '获取',否则别指望你需要指定[ HttpGet]以上动作/方法
为什么您将默认路由配置显示为解决方案? – Elisabeth
坏的投票。默认的WebAPI路由配置默认没有动作参数,只是“api/{controller}/{id}”。添加{action}实际上允许多种GET方法,这是OP想要的。 –
忘记他们是第二个行动方法。在课堂上,你不能有这两种方法。他们有相同的签名 –
看到这个 - http://stackoverflow.com/questions/15620142/web-api-multiple-get-with-same-signature-routing – Ivan