CreatedAtRoute маршрутизация на другой контроллер

Я создаю новый webapi, используя атрибутную маршрутизацию для создания вложенного маршрута следующим образом:

    // PUT: api/Channels/5/Messages
    [ResponseType(typeof(void))]
    [Route("api/channels/{id}/messages")]
    public async Task<IHttpActionResult> PostChannelMessage(int id, Message message)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != message.ChannelId)
        {
            return BadRequest();
        }

        db.Messages.Add(message);
        await db.SaveChangesAsync();

        return CreatedAtRoute("DefaultApi", new { id = message.Id }, message);
    }

Однако я хочу вернуть маршрут, который не является вложенным, т.е.

/api/Messages/{id}

который определяется на контроллере сообщений. Однако приведенный выше вызов CreatedAtRoute не разрешает этот маршрут и вместо этого выбрасывает. Я сделал что-то не так, или он не поддерживает маршрутизацию на другой контроллер API? нотабене маршрут, который я пытаюсь найти, не является атрибутом маршрута, он является маршрутом по умолчанию.

Исключением является:

Сообщение: «Произошла ошибка». ExceptionMessage: «UrlHelper.Link не должен возвращать ноль». ExceptionType: "System.InvalidOperationException" StackTrace: "в System.Web.Http.Results.CreatedAtRouteNegotiatedContentResult1.Execute() at System.Web.Http.Results.CreatedAtRouteNegotiatedContentResult1.ExecuteAsync (CancellationToken cancellationToken) в System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext () --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThuNon (Задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) в System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter1.GetResult () в System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext () "

Если это не поддерживает, каков канонический способ вернуть 201 и могу ли я сделать это безопасным способом рефактора?

Ответы на вопрос(3)

Ваш ответ на вопрос