首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在ASP.Net Web控制器中使用多个Get方法吗?

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

Stack Overflow用户
提问于 2014-11-17 11:10:34
回答 2查看 17.9K关注 0票数 6

我想为Ex实现多个Get方法:

Get(int id,User userObj)Get(int storeId,User userObj)

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

我正在考虑通过这个不包含动作方法名称的示例格式'//localhost:2342/‘来命中动作方法。

EN

回答 2

Stack Overflow用户

发布于 2014-11-17 11:54:37

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

现在,使用Web,如果您有两个方法,它们的操作与示例(都是GET)相同,并且具有相同的签名(int,User),那么当您试图从客户端(如Javascript)命中其中一个方法时,ASp.NET将尝试将传递的参数类型与方法(操作)匹配,因为它们都具有确切的签名,因此会失败,并引发关于歧义的例外。

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

希望这能有所帮助。

票数 7
EN

Stack Overflow用户

发布于 2014-11-17 13:48:10

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

WebApiConfig:

代码语言:javascript
复制
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new {id = RouteParameter.Optional }
);  

控制器:

代码语言:javascript
复制
public class TestController : ApiController
{
     public DataSet GetStudentDetails(int iStudID)
     {

     }

     [HttpGet]
     public DataSet TeacherDetails(int iTeachID)
     {

     }
}

备注:操作/方法名称应以“Get”开头,您需要在操作/方法的前面指定HttpGet

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26971384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档