. NET Core 2.2 Конфликт маршрута WebAPI для Delete / Employees и / Employees / EmployeeID, когда параметр пуст или пуст - PullRequest
0 голосов
/ 06 января 2020

Существует 2 маршрута WebAPI, дюймы NET ядро ​​2.2

1) [Удалить] / Сотрудники

2) [Удалить] / Сотрудники / {EmpID}

Когда EmpID пуст или пуст вместо второго маршрута, запускается первый маршрут. Мне нужен 2-й маршрут / Сотрудники / {EmpID} для запуска, когда маршрут "/ Сотрудники" и 1-й маршрут для запуска при вызове / Сотрудники.

Но в. NET core webapi в случаях бота " / Employees "и" / Employees / ", запускающие один и тот же маршрут /Employees.

Как можно вызвать 2-й маршрут при вызове" / Employees / ". Как разрешить конфликт с и без /

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Мне нужно, чтобы 2-й маршрут / Сотрудники / {EmpID} срабатывал при маршруте "/ Сотрудники /" и 1-й маршрут вызывался при вызове / Сотрудники.

Вы можете использовать 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()
{

}
0 голосов
/ 06 января 2020

Вам может потребоваться использовать атрибут [Route ("[action]")] для сопоставления нескольких маршрутов с корректными методами API. Ниже ссылка объясняет больше деталей для маршрутов GET и POST. http://www.binaryintellect.net/articles/9db02aa1-c193-421e-94d0-926e440ed297.aspx

Вы можете попробовать то же самое для ваших маршрутов УДАЛИТЬ.

...