.net core 参数为null或空时,Delete/Employees和/EmployeeID的.NET Core 2.2 WebAPI路由冲突

.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/”时,如何触发第二个路由

在.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时触发

您可以使用重写请求路径。请参阅我下面的演示,其中
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()
{

}

这个答案帮助了我