.NET Core 2.2 用于删除/Employees 和 /Employees/EmployeeID 的 WebAPI 路由冲突,当参数为 null 或为空时

.NET Core 2.2 WebAPI Route Conflict for Delete /Employees and /Employees/EmployeeID when parameter is null or empty

.NET core 2.2 中有 2 个 WebAPI 路由

1)[删除] /员工

2) [删除] /员工/{EmpID}

当 EmpID 为 null 或空而不是第二条路线时,第一条路线被触发。 我需要第二条路线 /Employees/{EmpID} 在路线为“/Employees/”时触发,第一条路线在调用 /Employees 时触发。

但在 .NET 核心 webapi 中,在机器人案例中“/Employees”和“/Employees/”触发相同的路由 /Employees。

当“/Employees/”为invoked.How时如何触发第二条路线来解决有/无/

的冲突

您可能需要使用 [Route("[action]")] 属性来映射多个路由以更正 API 方法。下面 link 解释了 GET 和 POST 路由的更多细节。 http://www.binaryintellect.net/articles/9db02aa1-c193-421e-94d0-926e440ed297.aspx

您可以对您的 DELETE 路线进行同样的尝试。

I need the 2nd route /Employees/{EmpID} to trigger when route is "/Employees/" and 1st route to trigger when /Employees is invoked.

您可以使用 URL Rewriter 将请求 path.Refer 重写为我下面的演示,其中 EmpIDint 类型。

1.Create 规则

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.Add启动Configure中的中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        app.UseRewriter(new RewriteOptions().Add(new RewriteRuleTest()));

        app.UseMvc();

    }

3.Test 动作

[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()
{

}