2014-11-17 70 views
5

我想实现多个获取方法,例如:我可以有多个Get方法在ASP.Net的Web API控制器

获取(INT ID,用户userObj)获取(INT STOREID,用户userObj )

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

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

+2

忘记他们是第二个行动方法。在课堂上,你不能有这两种方法。他们有相同的签名 –

+0

看到这个 - http://stackoverflow.com/questions/15620142/web-api-multiple-get-with-same-signature-routing – Ivan

回答

6

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

现在,使用Web API,如果您有两个方法与您的示例(均为GET)具有相同的操作,并且具有相同的签名(int,User),当您尝试从客户端中击中其中一个(比如来自J​​avascript),ASp.NET会尝试将传递的参数类型与方法(动作)进行匹配,并且由于两者都具有确切的签名,它将失败并引发关于歧义的异常。

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

希望有所帮助。

+0

感谢您的建议.... –

+0

请亲切看我的[问题](https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208

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) 
    { 

    } 
} 

注:动作/方法名应startwith '获取',否则别指望你需要指定[ HttpGet]以上动作/方法

+0

为什么您将默认路由配置显示为解决方案? – Elisabeth

+3

坏的投票。默认的WebAPI路由配置默认没有动作参数,只是“api/{controller}/{id}”。添加{action}实际上允许多种GET方法,这是OP想要的。 –

相关问题