2

.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

リソースパラメータを確認してください。deleteメソッドは整数を受け入れますが、文字を渡します。

このリクエストでは、代わりに404ステータスコードを期待していましたが、405メソッドは許可されていません。誰かがこの振る舞いを説明できますか、なぜそれが405を返すのですか?

URIに間違ったリソース名を指定すると、404が返されます。例:URI:http://localhost/OtherResource/a

更新:OpenRastaのInMemoryHostを使用してこれをテストしており、Deleteメソッドがサポートされています

4

1 に答える 1

1

私はその行動が正しいと信じています。入力されたURIは、OpenRastaが所有するURIと一致し、Idがintであるメソッドがあります。URIが解析され、登録のメソッドを実行できません(IDとして文字列を持っているものはありません)。したがって、ORは選択できず、リソースが登録されている間は、リソースを使用して実行できるメソッドがないことを認識しています。現在のリクエスト、したがって405。

于 2011-08-15T11:08:30.210 に答える