.net core 参数为null或空时,Delete/Employees和/EmployeeID的.NET Core 2.2 WebAPI路由冲突
在.NETCore2.2中有2个WebAPI路由 1) [删除] /雇员 2) [删除] /雇员/{EmpID} 当EmpID为null或空而不是第二条路由时,将触发第一条路由。 我需要第2个路由/Employees/{EmpID}在路由为“/Employees/”时触发,第1个路由在调用/Employees时触发 但在.NET core webapi中,bot案例中的“/Employees”和“/Employees/”触发相同的路由/员工 在调用“/Employees/”时,如何触发第二个路由。如何解决使用和不使用/的冲突您可能需要使用[route(“[action]”)属性将多个路由映射到正确的API方法。下面的链接解释了获取和发布路由的更多详细信息。 您可以对删除路由进行相同的尝试 我需要第2个路由/Employees/{EmpID}在路由为“/Employees/”时触发,第1个路由在调用/Employees时触发 您可以使用重写请求路径。请参阅我下面的演示,其中.net core 参数为null或空时,Delete/Employees和/EmployeeID的.NET Core 2.2 WebAPI路由冲突,.net-core,routes,asp.net-core-webapi,conflict,webapi,.net Core,Routes,Asp.net Core Webapi,Conflict,Webapi,在.NETCore2.2中有2个WebAPI路由 1) [删除] /雇员 2) [删除] /雇员/{EmpID} 当EmpID为null或空而不是第二条路由时,将触发第一条路由。 我需要第2个路由/Employees/{EmpID}在路由为“/Employees/”时触发,第1个路由在调用/Employees时触发 但在.NET core webapi中,bot案例中的“/Employees”和“/Employees/”触发相同的路由/员工 在调用“/Employees/”时,如何触发第二个路由
EmpID
是int
类型
1.创建规则
public class RewriteRuleTest : IRule
{
public void ApplyRule(RewriteContext context)
{
var request = context.HttpContext.Request;
var path = request.Path.Value;
if (path.ToLower() == "/employees/")
{
context.HttpContext.Request.Path = "/employees/0";
}
}
}
2.在启动配置中添加中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseRewriter(new RewriteOptions().Add(new RewriteRuleTest()));
app.UseMvc();
}
3.试验行动
[HttpDelete("/Employees/{EmpID}")]
public void DeleteOne(int empID)
{
if (empID == 0)
{
//for the condition when empID is null or empty
}
else
{
//for the condition when empID is not null or empty
}
}
[HttpDelete("/Employees")]
public void Delete()
{
}
这个答案帮助了我