OpenRasta - неверный код состояния возвращается, когда ресурс URI неверен - PullRequest
2 голосов
/ 18 июля 2011

Я использую каркас OpenRasta в сервисе .net, и у меня есть метод, описанный ниже в обработчике

public OperationResult Delete(int Id)
{
  // Do some operation and get an entity
  return new OperationResult.OK(MyResource);
}

Моя конфигурация выглядит следующим образом:

ResourceSpace.Has.ResourcesOfType<MyResource>()
          .AtUri("/MyResource/{Id}")
          .And.AtUri("/MyResource")
          .HandledBy<MyResourceHandler>()
          .AsJsonDataContract().ForMediaType("application/json")
          .And.AsXmlDataContract().ForMediaType("application/xml");

Мой запрос оформлен как показано ниже

HttpMethod: DELETE
AcceptHeader: "application/xml"
URI: http://localhost/MyResource/a

Обратите внимание на параметр ресурса: метод delete принимает целое число, а я передаю символ.

С этим запросом я ожидал 404 кода состояния, вместо этого я получил 405 Метод не разрешен. Кто-нибудь может объяснить это поведение, почему оно возвращает 405?

Если я даю неверное имя ресурса в URI, он возвращает мне 404. Например: URI:http://localhost/OtherResource/a

Обновление : я тестирую это с использованием метода InMemoryHost и удаления OpenRasta.

1 Ответ

1 голос
/ 15 августа 2011

Я считаю, что поведение будет правильным. Введенный URI соответствует одному OpenRasta, и у вас есть метод, в котором Id - int. URI анализируется, и никакой метод регистрации не может быть выполнен (ни один из них не имеет строку в качестве идентификатора), поэтому OR не может быть выбран и знает, что, хотя ресурс был зарегистрирован, нет метода, который он может выполнить с текущий запрос, следовательно 405.

...