webapi路由问题

dongshanyu 2018-07-16 02:26:14

相关配置和代码如下:

1 WebApiConfig:使用默认路由,暂未增加{action}参数
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

2 StaffsController:

// GET: api/Staffs
public IEnumerable<Staff> GetAllStaffs()
{
return repository.GetAll();
}

// GET: api/Staffs/5
public Staff GetStaff(string staffCD)
{
Staff item = repository.Get(staffCD);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}

3 前端调用处代码:
var sStaffCD = 'S1';
$.ajax({
url: "/api/Staffs/" + sStaffCD,
type: "GET",
contentType: "application/json; charset=urf-8",
success: function (data) {
...
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
...
}
});


问题: 每次都路由到GetAllStaffs而非GetStaff,为什么?
...全文
129 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongshanyu 2018-07-16
  • 打赏
  • 举报
回复
之前想当然以为{id}与实际的控制器类中函数的参数名没有一致性要求,了解了,谢谢两位的指点
  • 打赏
  • 举报
回复
引用 楼主 dongshanyu 的回复:
相关配置和代码如下:

1 WebApiConfig:使用默认路由,暂未增加{action}参数
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

2 StaffsController:

// GET: api/Staffs
public IEnumerable<Staff> GetAllStaffs()
{
return repository.GetAll();
}

// GET: api/Staffs/5
public Staff GetStaff(string staffCD)
{
Staff item = repository.Get(staffCD);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}

3 前端调用处代码:
var sStaffCD = 'S1';
$.ajax({
url: "/api/Staffs/" + sStaffCD,
type: "GET",
contentType: "application/json; charset=urf-8",
success: function (data) {
...
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
...
}
});


问题: 每次都路由到GetAllStaffs而非GetStaff,为什么?


因为你路由里面写了
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
你方法是
GetStaff(string staffCD)
调用方法当然不能是
api/controller/id
当然是
/api/Staffs?staffCD=sStaffCD

我觉得你可能还是不明白,你路由里面写的意思是当方法为 方法名(参数名为id)的时候才会采用
/api/控制器名称/方法名称/id
的方式路由,否则依旧是
/api/控制器名称/方法名称?参数=参数
的方式。
  • 打赏
  • 举报
回复
sStaffCD,你route定义的参数叫id,而你方法里面的参数不是id

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧