Маршрут WebAPI 2, не разрешающийся с помощью guid в качестве параметра

#asp.net-mvc #asp.net-web-api2

#asp.net-mvc #asp.net-web-api2

Вопрос:

У меня есть класс, определенный ниже, и я использую его со следующими URL-адресами

Этот URL работает: http://rooturl.com/website/api/v1/queuedNotifications

Этот URL не http://rooturl.com/website/api/v1/queuedNotifications/4b2a366b-e349-468d-99e6-b60918dc79f9

Этот URL не http://rooturl.com/website/api/v1/notifications/4b2a366b-e349-468d-99e6-b60918dc79f9

Он не распознает GUID в конце URL-адреса в качестве параметра для GET. кто-нибудь может сказать мне, что я могу делать неправильно? Я установил ограничение на префикс маршрута для GUID, и имена параметров совпадают… не уверен, в чем дело.

Я получаю ошибку 404.0 с URL-адресами, которые не работают

 <fieldset>
<legend>Error Summary</legend>
<h2>HTTP Error 404.0 - Not Found</h2>
<h3>The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.</h3>
</fieldset>
  

Определение класса

 [RoutePrefix("api/v1")]
[Authorize]
public class NotificationsService : BaseApiService
{
    private readonly INotificationsService _notificationsService;

    public NotificationsService(INotificationsService notificationsService)
    {
        _notificationsService = notificationsService;
    }

    #region UserNotifications

    [Route("notifications/{userId:guid}")]
    [AllowAnonymous]
    [AcceptVerbs("GET")]
    public async Task<List<UserNotificationModel>> GetNotifications(Guid userId)
    {
        return await _notificationsService.GetNotifications(userId);
    }

    [Route("notification")]
    [AllowAnonymous]
    [AcceptVerbs("POST")]
    public async Task<UserNotificationModel> CreateNotifications(UserNotificationModel model)
    {
        return await _notificationsService.CreateNotification(model);

    }
    #endregion


    #region Queued Notifications
    [Route("queuedNotifications")]
    [AllowAnonymous]
    [AcceptVerbs("GET")]
    public async Task<List<NotificationsQueueModel>> GetQueuedNotifications()
    {
        return await _notificationsService.GetQueuedNotifications();
    }

    [Route("queuedNotifications/{userId:guid}")]
    [AllowAnonymous]
    [AcceptVerbs("GET")]
    public async Task<List<NotificationsQueueModel>> GetQueuedNotifications(Guid userId)
    {
        return await _notificationsService.GetQueuedNotifications(userId);
    }
}
  

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

1. Вы когда-нибудь выясняли, в чем была проблема? У меня такая же проблема.

2. Я не могу воспроизвести вашу проблему. Когда я создаю новый контроллер (производный от ApiController), все работает нормально. (Изменен возврат к Ok() и IHttpActionResult).