Множественная маршрутизация с одинаковыми путями, но с разными сложными параметрами - PullRequest
0 голосов
/ 14 октября 2018

Например:

api/file/occurrence?sha256=...

[HttpGet]
[Route("api/file/")]
public async Task<IHttpActionResult> GetFileBySha256Async([FromUri] FilesBySha256RequestDTO requestDTO)
{
}

api/file/occurrence?sha256=...&from_date=..&to_date=..

[HttpGet]
[Route("api/file/")]
public async Task<IHttpActionResult> GetFileBySha256AndDateAsync([FromUri] FilesBySha256AndDateRequestDTO requestDTO)
{
}

И DTO:

public class FilesBySha256RequestDTO
{             
    public string sha256 { get; set; }
}


public class FilesBySha256AndDateRequestDTO
{
    public string sha256 { get; set; }
    public DateTime? from_date { get; set; }
    public DateTime? to_date { get; set; }
}

Какя могу выполнить это поведение?Я получаю следующее исключение:

"ExceptionMessage": "Multiple actions were found that match the request: \r\nGetFileBySha256Async on type Cynet.Client.WebAPI.Controllers.FileController\r\nGetFileOccurrencesSha256 on type Cynet.Client.WebAPI.Controllers.FileController

1 Ответ

0 голосов
/ 14 октября 2018

Невозможно различить маршрут между двумя, потому что api/file/occurrence?sha256=...&from_date=..&to_date=.. и api/file/occurrence?sha256=... - это то же самое для каркаса.Первое, что вы можете сделать, это изменить второй маршрут, например api/fileOnDate/.Если это невозможно сделать, вы можете определить третью функцию и использовать ее в качестве ручного маршрутизатора, например:

[HttpGet]
[Route("api/file/")]
public async Task<IHttpActionResult> GetFileBy([FromUri] FilesBySha256AndDateRequestDTO requestDTO)
{
    if (!requestDTO.from_date.HasValue && !requestDTO.to_date.HasValue)
    {
        return await this.GetFileBySha256Async(new FilesBySha256RequestDTO() { sha256 = requestDTO.sha256 });
    }
    else
    {
        return await this.GetFileBySha256AndDateAsync(requestDTO);
    }
}

private async Task<IHttpActionResult> GetFileBySha256Async(FilesBySha256RequestDTO requestDTO)
{            
}

private async Task<IHttpActionResult> GetFileBySha256AndDateAsync(FilesBySha256AndDateRequestDTO requestDTO)
{
}

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...