c# - C# webAPI 限制路由
问题描述
在 webapi 项目的 WebAPIConfig.cs 中,添加了 2 个路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我尝试创建一个包含以下功能的 apiController
[HttpGet]
public string Get(int id)
{
return "get";
}
[HttpGet]
[ActionName("ByWait")]
public string[] ByWait(int id)
{
return "bywait";
}
我希望请求 /api/controllername/1234 返回“get”,请求 /api/controllername/bywait/1234 返回“bywait”。
但是实际结果是 /api/controllername/1234 >> throw exception 发现多个动作匹配请求 /api/controllername/bywait/1234 >> "by wait"
但是可以解决问题吗?st 如何限制函数 ByWait 只接受包含操作的请求,以便它只响应 /api/controllername/bywait/1234 并忽略 /api/controllername/1234
还是有其他更好的解决方案?
谢谢
解决方案
首先你可以改变 WebApiConfig:
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}"
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后控制器:
[HttpGet]
public string Get()
{
return "get-default";
}
[HttpGet]
public string Get(int id)
{
return "get" + id;
}
[HttpGet]
[Route("api/values/bywait/{id}")]
public string ByWait(int id)
{
return "bywait";
}
推荐阅读
- javascript - 如何使用递归编写一个函数,该函数接受 2 个整数并返回一个包含 2 个输入整数之间的整数的数组
- laravel - select2 未显示 livewire 组件中的选项
- java - 显示金字塔
- pdf - 呈现为 pdf 的 Visualforce 页面可以使用 Docusign 发送给 Esign
- c# - 有没有办法以链接格式从根目录一次获取所有文件以使用图形 api 进行查看?
- postgresql - 如何安全地向数据库添加新货币操作?
- c# - 注册数据未显示在 ASP.NET 项目的数据库中
- javascript - Nuxt:如何在应用初始化时加载数据以存储
- c - 使用 Parson 库创建一个 json 数组?
- django - 如何在 django 模型中订购一个choicefiled