我在 iis7 中有一个站点,将几个 openrasta 应用程序作为虚拟目录托管。其中一个 openrasta 应用程序托管单个资源,因此我希望它在该虚拟目录的根目录中运行。我能够成功获取资源,但无法发布资源。发布时出现 405 错误。
在本地它看起来像:
http://localhost/OpenRastaApp1/Resource1 http://localhost/OpenRastaApp1/Resource2 http://localhost/OpenRastaApp2/Resource3 http://localhost/OpenRastaApp2/Resource4
我想添加另一个应用程序,但由于此应用程序仅包含 1 个资源,我想通过应用程序的基本 uri 访问它。IE
http://localhost/OpenRastaApp3 不是 http://localhost/OpenRastaApp3/Resource5
我能够获取 resource5,但无法使用以下配置发布到它。
它不应该与模板“/{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] 详细 (0) http://api.local.site.com/Thing 的传入主机请求 13-[2011-03-01 10:38:59Z] 详细(0)添加通信上下文数据 13-[2011-03-01 10:38:59Z] 警告(0)对 BootstrapperContributor 的贡献者调用有一个空操作。 13-[2011-03-01 10:38:59Z] Start(1)进入PipelineRunner:执行贡献者ExceptionHandlerContributor.LogException 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) 进入 PipelineRunner: 执行贡献者 HttpMethodOverriderContributor.OverrideHttpVerb 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 开始(1)进入 PipelineRunner:执行贡献者 DigestAuthorizerContributor.ReadCredentials 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 开始(1)进入 PipelineRunner:执行贡献者 UriDecoratorsContributor.ProcessDecorators 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) 进入 PipelineRunner: 执行贡献者 ResourceTypeResolverContributor.ResolveResource 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1)进入PipelineRunner:执行贡献者HandlerResolverContributor.ResolveHandler 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) 进入 PipelineRunner: 执行贡献者 OperationCreatorContributor.CreateOperations 13-[2011-03-01 10:38:59Z] Verbose(0) 创建了名为 Post 的操作,签名为 ThingHandler::Post(ThingResource ThingResource) 13-[2011-03-01 10:38:59Z] Verbose(0) 创建了名为 Get 的操作,带有签名 ThingHandler::Get(Int32 id) 13-[2011-03-01 10:38:59Z] Verbose(0) 创建了名为 Amend 的操作,带有签名 ThingHandler::Amend(ThingResource ThingResource) 13-[2011-03-01 10:38:59Z] Verbose(0) 创建了名为 Cancel 的操作,带有签名 ThingHandler::Cancel(Int32 id) 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) 进入 PipelineRunner: 执行贡献者 OperationFilterContributor.ProcessOperations 13-[2011-03-01 10:38:59Z] 详细(0)找到 1 个具有匹配名称的操作。 13-[2011-03-01 10:38:59Z] 详细 (0) 找到 1 个具有匹配 [HttpOperation] 属性的操作。 13-[2011-03-01 10:38:59Z] 详细(0)没有资源或没有 uri 名称。不过滤。 mscorlib.dll 中出现了“System.FormatException”类型的第一次机会异常 mscorlib.dll 中出现了“System.FormatException”类型的第一次机会异常 System.dll 中出现“System.Exception”类型的第一次机会异常 OpenRasta.DLL 中出现了“System.NotSupportedException”类型的第一次机会异常 mscorlib.dll 中出现了“System.FormatException”类型的第一次机会异常 mscorlib.dll 中出现了“System.FormatException”类型的第一次机会异常 System.dll 中出现“System.Exception”类型的第一次机会异常 OpenRasta.DLL 中出现了“System.NotSupportedException”类型的第一次机会异常 13-[2011-03-01 10:38:59Z] 错误(0)没有任何操作具有可以与 uri 参数匹配的成员: id=东西; 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 详细(0)管道处于 RenderNow 模式。 13-[2011-03-01 10:38:59Z] Start(1) 进入 PipelineRunner: 执行贡献者 OperationResultInvokerContributor.RunOperationResult 13-[2011-03-01 10:38:59Z] 信息(0)执行 OperationResult OperationResult:type=MethodNotAllowed,statusCode=405。 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 开始(1)进入 PipelineRunner:执行贡献者 ResponseEntityCodecResolverContributor.FindResponseCodec 13-[2011-03-01 10:38:59Z] 信息(0)未搜索响应编解码器。响应实体为空或已设置响应编解码器。 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 开始(1)进入 PipelineRunner:执行贡献者 DigestAuthorizerContributor.WriteCredentialRequest 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 开始(1)进入 PipelineRunner:执行贡献者 ResponseEntityWriterContributor.WriteResponse 13-[2011-03-01 10:38:59Z] 详细(0)没有响应实体,没有呈现。 13-[2011-03-01 10:38:59Z] 详细(0)编写 http 标头。 13-[2011-03-01 10:38:59Z] 停止(1)退出 PipelineRunner 13-[2011-03-01 10:38:59Z] 信息(0)管道完成。
有没有人能帮我解决这个问题?
干杯
戴夫