特に PUT リクエストに関しては、OpenRasta の URL ルーティングで多くの問題を抱えています。
架空の UserContact ハンドラーがあり、次の署名で公開する必要があるとします。
//Create a new contact:
POST /users/{userId}/contacts/create
//Update a contact:
PUT /users/{userId}/contact/{contactId}
どちらの場合も、要求本文には、連絡先のフォーム エンコードされたパラメーターが含まれています。
私の Configuration.cs には次のものがあります。
ResourceSpace.Uses.PipelineContributor<HttpMethodOverriderContributor>();
ResourceSpace.Has.ResourcesOfType<ContactPost>()
.AtUri("/users/{userId}/contacts/create")
.And.AtUri("/users/{userId}/contacts/{contactId}")
.HandledBy<UserContactHandler>()
.AsXmlDataContract()
.And.AsJsonDataContract();
My Handler には 2 つのメソッドがあります。
public OperationResult Post(int userId, ContactPost contact)
public OperationResult Put(int userId, int contactId, ContactPost contact)
このコードで 2 つの問題が発生します。
多くのクライアント (および IIS サーバー) は、PUT/DELETE をサポートしていません。最終的には、上記の両方の操作を POST にすることで、これを単純化したいと思います。残念ながら、それを行うとすぐに、OpenRasta はバインドしようとしているメソッドを判別できず、どちらも機能しません。/create と /{contactId} リクエストの両方で 406 Not Acceptable が返されます。
ただし、上記のコードを保持し、クライアントが X-HTTP-Method-Override: PUT ヘッダーを介して送信する場合、/create リクエストは機能しますが、/{contactId} リクエストは依然として 406 を返します。
ハンドラーにステップインすることすらできないため、このようなデバッグをどこから開始すればよいかわかりません。
ASP.NET MVC のような特定のメソッドに URL ルートを明示的にマップするように OpenRasta に指示する方法はありますか? それとも、私がここで間違っていることは明らかですか?