0

在 .NET core 2.2 中有 2 个 WebAPI 路由

1)[删除] /员工

2) [删除] /Employees/{EmpID}

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

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

调用“/Employees/”时如何触发第二条路线。如何解决有和没有/的冲突

4

2 回答 2

0

我需要第二条路由 /Employees/{EmpID} 在路由为“/Employees/”时触发,而第一条路由在调用 /Employees 时触发。

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

}
于 2020-01-07T06:44:46.253 回答
0

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

您可以为您的 DELETE 路线尝试相同的方法。

于 2020-01-06T20:16:38.947 回答