Как мне определить маршрут для вызова службы .Net Core 3.1 webapi, который принимает массив строк в качестве параметра?

#c# #.net-core #routes #asp.net-core-webapi

#c# #.net-ядро #маршруты #asp.net-ядро-webapi

Вопрос:

Я создаю службу веб-API .NETCore 3.1.

У меня возникли трудности с определением правильного определения маршрутизации для вызова службы.

Рассмотрим следующее определение:

 [HttpPut]
[Route("{paramA}/{paramB}")]
public void Sample(string paramA, string[] paramB)
{
}
 

Как правильно определить мои параметры маршрутизации при передаче
массива строк? Должен ли я вместо этого использовать List?

Комментарии:

1. Я бы передал paramB в querystring — ?paramB=1amp;paramB=2 etc

2. По какой-либо причине вам нужны переменные в маршруте? Вы можете поместить ParamB в тело, и .net разберется с этим. Это также может предотвратить превышение максимальной длины URL-адреса в зависимости от вашего варианта использования.

3. @knowonecanknow — Я не совсем тебя понимаю. Вы можете сделать элобарат?

Ответ №1:

Я полагаю, что вы могли бы передать список массивов по строке запроса:

 [HttpPut]   
[Route("{paramA}")]
public void Sample([FromRoute]string paramA, [FromQuery]string[] paramB)
{
}
 

Отправьте запрос следующим образом: https://localhost:5001/xxxxxx/aaa?paramB=ssamp;paramB=sd .

Результат: введите описание изображения здесь

Ответ №2:

Я рекомендую вам передавать строки Arraay в теле запроса в HttpPost, это та часть запроса, в которой у вас нет ограничений на символы, когда в URL-адресе запроса у вас будет что-то вроде ограничений на 300 символов.

Например:

 HttpPost]
[Route("MyArrayStrings")]
public async string MyArrayStrings([FromBody] string content)
{
    return content;
}
 

А затем вы можете использовать Newtonsoft для сериализации данных при отправке запроса и для десериализации при получении.

Комментарии:

1. when in the url of the query you will have something like 300 character limits. 2000 в целом (и это при условии, что поддерживается IE11).