仮想ディレクトリとしていくつかのopenrastaアプリケーションをホストするiis7のサイトがあります。これらの openrasta アプリケーションの 1 つは単一のリソースをホストするため、その仮想ディレクトリのルートで実行する必要があります。リソースを正常に取得できますが、リソースを POST できません。POST すると 405 エラーが発生します。
ローカルでは次のようになります。
http://localhost/OpenRastaApp1/Resource1 http://localhost/OpenRastaApp1/Resource2 http://localhost/OpenRastaApp2/Resource3 http://localhost/OpenRastaApp2/Resource4
別のアプリを追加したいのですが、このアプリには 1 つのリソースしか含まれないため、アプリのベース URI からアクセスしたいと考えています。いえ
http://localhost/OpenRastaApp3 ではなく http://localhost/OpenRastaApp3/Resource5
resource5 を取得できますが、以下の構成を使用して POST できません。
投稿時にIDを含めないため、テンプレート「/{id}」と一致しないはずです。
私の構成は次のとおりです。
ResourceSpace.Has
.ResourcesOfType<ThingResource>()
.AtUri("/").And
.AtUri("/{id}")
.HandledBy<ThingHandler>()
.AsJsonDataContract();
そして、私のハンドラーコードは次のとおりです。
public class ThingHandler
{
[HttpOperation(HttpMethod.POST)]
public OperationResult Post(ThingResource thingResource)
{
var thing = thingResource.ToThingEntity();
thing = _thingService.Make(thing);
return new OperationResult.OK(thing.ToThingResource());
}
[HttpOperation(HttpMethod.GET)]
public OperationResult Get(int id)
{
var thing = _thingService.Get(id);
return new OperationResult.OK(thing.ToThingResource());
}
}
以下のデバッグログ
13-[2011-03-01 10:38:59Z] Verbose(0) http://api.local.site.com/Thing の着信ホスト要求 13-[2011-03-01 10:38:59Z] Verbose(0) 通信コンテキスト データの追加 13-[2011-03-01 10:38:59Z] 警告 (0) BootstrapperContributor の Contributor 呼び出しに null アクションがありました。 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor ExceptionHandlerContributor.LogException を実行中 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor HttpMethodOverriderContributor.OverrideHttpVerb を実行する 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor を実行中 DigestAuthorizerContributor.ReadCredentials 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor UriDecoratorsContributor.ProcessDecorators を実行中 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor ResourceTypeResolverContributor.ResolveResource を実行中 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor HandlerResolverContributor.ResolveHandler を実行する 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor OperationCreatorContributor.CreateOperations を実行する 13-[2011-03-01 10:38:59Z] Verbose(0) 署名 ThingHandler::Post(ThingResource ThingResource) を持つ Post という名前の操作を作成しました 13-[2011-03-01 10:38:59Z] Verbose(0) 署名 ThingHandler::Get(Int32 id) を持つ Get という名前の操作を作成しました 13-[2011-03-01 10:38:59Z] Verbose(0) 署名 ThingHandler::Amend(ThingResource ThingResource) を持つ Amend という名前の操作を作成しました 13-[2011-03-01 10:38:59Z] Verbose(0) 署名 ThingHandler::Cancel(Int32 id) を持つ Cancel という名前の操作を作成しました 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor OperationFilterContributor.ProcessOperations を実行する 13-[2011-03-01 10:38:59Z] Verbose(0) 名前が一致する操作が 1 つ見つかりました。 13-[2011-03-01 10:38:59Z] Verbose(0) [HttpOperation] 属性に一致する 1 つの操作が見つかりました。 13-[2011-03-01 10:38:59Z] 詳細 (0) リソースまたは URI 名がありません。フィルタリングしていません。 タイプ 'System.FormatException' の初回例外が mscorlib.dll で発生しました タイプ 'System.FormatException' の初回例外が mscorlib.dll で発生しました System.dll で、タイプ 'System.Exception' の初回例外が発生しました タイプ 'System.NotSupportedException' の初回例外が OpenRasta.DLL で発生しました タイプ 'System.FormatException' の初回例外が mscorlib.dll で発生しました タイプ 'System.FormatException' の初回例外が mscorlib.dll で発生しました System.dll で、タイプ 'System.Exception' の初回例外が発生しました タイプ 'System.NotSupportedException' の初回例外が OpenRasta.DLL で発生しました 13-[2011-03-01 10:38:59Z] エラー (0) いずれの操作にも、URI パラメーターと一致するメンバーがありませんでした: id=モノ; 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Verbose(0) パイプラインは RenderNow モードです。 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor を実行する OperationResultInvokerContributor.RunOperationResult 13-[2011-03-01 10:38:59Z] 情報(0) 実行中 OperationResult OperationResult: type=MethodNotAllowed, statusCode=405. 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor ResponseEntityCodecResolverContributor.FindResponseCodec を実行中 13-[2011-03-01 10:38:59Z] 情報(0) 応答コーデックが検索されませんでした。応答エンティティが null であるか、応答コーデックが既に設定されています。 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor を実行します DigestAuthorizerContributor.WriteCredentialRequest 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] Start(1) PipelineRunner に入る: contributor ResponseEntityWriterContributor.WriteResponse を実行中 13-[2011-03-01 10:38:59Z] Verbose(0) レンダリングではなく、応答エンティティがありませんでした。 13-[2011-03-01 10:38:59Z] Verbose(0) http ヘッダーの書き込み。 13-[2011-03-01 10:38:59Z] Stop(1) PipelineRunner の終了 13-[2011-03-01 10:38:59Z] 情報(0) パイプラインが終了しました。
これで私を助けることができる人はいますか?
乾杯
デイブ