OpenRasta - 当资源 uri 不正确时返回不正确的状态代码

发布于 2024-11-24 05:46:05 字数 969 浏览 4 评论 0原文

我在 .net 服务中使用 OpenRasta 框架,并且在处理程序中有如下方法

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

请观察资源参数:删除方法接受整数,而我传递一个特点。

有了这个请求,我期望得到 404 状态代码,而不是得到 405 Method not allowed。谁能解释一下这种行为,为什么它返回 405?

如果我在 URI 中提供了不正确的资源名称,它会返回 404。 例如:URI:http://localhost/OtherResource/a

更新:我正在使用以下命令进行测试:支持OpenRasta的InMemoryHost和Delete方法

I'm using OpenRasta framework in a .net service and I've a method as below in the handler

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

My configuration looks like below:

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

My request is framed as below

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

Please observe the resource parameter: delete method accepts integer whereas I'm passing a character.

With this request I expected 404 status code instead I got 405 Method not allowed. Can anybody explain this behavior, why it is returning 405?

If I give incorrect resource name in the URI it returns me 404. for ex: URI:http://localhost/OtherResource/a

Update: I'm testing this using OpenRasta's InMemoryHost and Delete method is supported

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆悲凉 2024-12-01 05:46:06

我相信这种行为是正确的。输入的 URI 与 OpenRasta 拥有的匹配,并且您有一个方法,其中 Id 是 int。 URI 被解析,并且注册上的任何方法都无法执行(它们都没有字符串作为 Id),因此 OR 是别无选择,并且知道虽然资源已注册,但没有可以使用该资源执行的方法当前请求,因此是 405。

I believe the behavior to be correct. The URI entered matches one OpenRasta owns, and you have a method in which the Id is an int. The URI gets parsed and no method on the registration can be executed (none of them have a string as the Id), so OR is out of choices and know that while the resource has been registered, there is no method it can execute with the current request, hence the 405.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文