加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 为什么REST API会调用错误的方法?

发布时间:2020-12-16 09:56:01 所属栏目:asp.Net 来源:网络整理
导读:我的API控制器中有2个get方法,一个不接受参数,另一个接受整数参数. API页面的路径是/ api / contact.当我在此处导航时,页面将按预期显示. 但是,当我将路径更改为/ api / contact / 4以尝试调用接受整数参数的get方法时,代码只调用不带任何参数的相同get方法.
我的API控制器中有2个get方法,一个不接受参数,另一个接受整数参数.

API页面的路径是/ api / contact.当我在此处导航时,页面将按预期显示.

但是,当我将路径更改为/ api / contact / 4以尝试调用接受整数参数的get方法时,代码只调用不带任何参数的相同get方法.我通过输入断点和调试来了解这一点.出了什么问题?

public PhoneInfo[] Get()
{
    return contactRepository.GetAllContacts();
}

public PhoneInfo[] Get(int phn)
{
    return contactRepository.GetMessages(phn.ToString());
}

解决方法

WebApi基于反射工作,这意味着您的global.asax / routing配置中的花括号{vars}必须与方法中的相同名称匹配.

默认情况下,global.asax将如下所示:

RouteTable.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = System.Web.Http.RouteParameter.Optional });

因此,为了匹配上面存在id作为var的url是api / contact / {id},该方法需要声明如下:

public string Get(int id)
       return "test";
   }

在您的示例中,您正在将参数的默认名称从id更改为phn,导致WebApi无法找到您的方法.

另一个选项可以是使用RouteAttribute:

[Route("api/contact/{phn}"),HttpGet]
 public string Get(int phn)
   return "another value";
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读