#c# #asp.net #rest #asp.net-core #endpoint
Вопрос:
У меня есть сервис, с помощью которого клиенты могут подписаться на получение событий через WebSocket. Клиенты могут получать события двумя способами:
- Клиент может вызвать сервер WebSocket и передать ссылку на сервер WS службе. Служба будет подключаться и отправлять события на сервер.
- Служба может генерировать ссылки для доступа к своему серверу WS. Клиент сможет получать события, подключившись к серверу WebSocket по предоставленной ссылке.
В каждом из вариантов клиенту необходимо подписаться на события, которые он хочет получать.
- Запрос:
{ "Events": [ "1", "2" ], "Url": "wss://some.url" }
. Ответ: 201. - Запрос:
{ "Events": [ "1", "3" ] }
. Ответ: 201{ "Url": "wss://some.url" }
.
Пример конечной точки для первого варианта:
[HttpPost("subscriptions")]
[ProducesResponseType(StatusCodes.Status201Created)]
public async Task<IActionResult> Subscribe([FromBody] IEnumerable<string> events, [FromBody] string url)
{
\...
return StatusCode(StatusCodes.Status201Created);
}
- Как правильно спроектировать конечные точки, если есть два варианта подписки на запрос и ответ?
- Какое название и маршрут были бы правильными в этом случае?
- Если есть возможность объединить их в одну конечную точку, как это сделать правильно?
Комментарии:
1. Привет @Александр, ваш код неверен. Вы не можете применять
[FromBody]
более одного параметра для каждого метода действия.2. Привет, @Рена, спасибо за комментарий, ты права. Однако это всего лишь пример, который не имеет ничего общего с реальным проектом.