I have a site in iis7 hosting several openrasta applications as virtual directories. One of these openrasta application hosts a single resource, so I want it to run in the root of that virtual directory. I am able to GET the resource succesfully but am unable to POST the resource. When POSTing I get a 405 error.
Locally it looks like:
http://localhost/OpenRastaApp1/Resource1 http://localhost/OpenRastaApp1/Resource2 http://localhost/OpenRastaApp2/Resource3 http://localhost/OpenRastaApp2/Resource4
I want to add another app, but as this app will only contain 1 resource I want to access it through the base uri of the app. I.e.
http://localhost/OpenRastaApp3 not http://localhost/OpenRastaApp3/Resource5
I am able to GET resource5 but am unable to POST to it using the below configuration.
It should not match the template "/{id}" as I do not include an ID when posting.
My configuration is as follows:
ResourceSpace.Has
.ResourcesOfType<ThingResource>()
.AtUri("/").And
.AtUri("/{id}")
.HandledBy<ThingHandler>()
.AsJsonDataContract();
And my handler code is:
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());
}
}
Debug log as follows
13-[2011-03-01 10:38:59Z] Verbose(0) Incoming host request for http://api.local.site.com/Thing 13-[2011-03-01 10:38:59Z] Verbose(0) Adding communication context data 13-[2011-03-01 10:38:59Z] Warning(0) Contributor call for BootstrapperContributor had a null Action. 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor ExceptionHandlerContributor.LogException 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor HttpMethodOverriderContributor.OverrideHttpVerb 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor DigestAuthorizerContributor.ReadCredentials 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor UriDecoratorsContributor.ProcessDecorators 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor ResourceTypeResolverContributor.ResolveResource 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor HandlerResolverContributor.ResolveHandler 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor OperationCreatorContributor.CreateOperations 13-[2011-03-01 10:38:59Z] Verbose(0) Created operation named Post with signature ThingHandler::Post(ThingResource ThingResource) 13-[2011-03-01 10:38:59Z] Verbose(0) Created operation named Get with signature ThingHandler::Get(Int32 id) 13-[2011-03-01 10:38:59Z] Verbose(0) Created operation named Amend with signature ThingHandler::Amend(ThingResource ThingResource) 13-[2011-03-01 10:38:59Z] Verbose(0) Created operation named Cancel with signature ThingHandler::Cancel(Int32 id) 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor OperationFilterContributor.ProcessOperations 13-[2011-03-01 10:38:59Z] Verbose(0) Found 1 operation(s) with a matching name. 13-[2011-03-01 10:38:59Z] Verbose(0) Found 1 operation(s) with matching [HttpOperation] attribute. 13-[2011-03-01 10:38:59Z] Verbose(0) No resource or no uri name. Not filtering. A first chance exception of type 'System.FormatException' occurred in mscorlib.dll A first chance exception of type 'System.FormatException' occurred in mscorlib.dll A first chance exception of type 'System.Exception' occurred in System.dll A first chance exception of type 'System.NotSupportedException' occurred in OpenRasta.DLL A first chance exception of type 'System.FormatException' occurred in mscorlib.dll A first chance exception of type 'System.FormatException' occurred in mscorlib.dll A first chance exception of type 'System.Exception' occurred in System.dll A first chance exception of type 'System.NotSupportedException' occurred in OpenRasta.DLL 13-[2011-03-01 10:38:59Z] Error(0) None of the operations had members that could be matches against the uri parameters: id=Thing; 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Verbose(0) Pipeline is in RenderNow mode. 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor OperationResultInvokerContributor.RunOperationResult 13-[2011-03-01 10:38:59Z] Information(0) Executing OperationResult OperationResult: type=MethodNotAllowed, statusCode=405. 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor ResponseEntityCodecResolverContributor.FindResponseCodec 13-[2011-03-01 10:38:59Z] Information(0) No response codec was searched for. The response entity is null or a response codec is already set. 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor DigestAuthorizerContributor.WriteCredentialRequest 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Start(1) Entering PipelineRunner: Executing contributor ResponseEntityWriterContributor.WriteResponse 13-[2011-03-01 10:38:59Z] Verbose(0) There was no response entity, not rendering. 13-[2011-03-01 10:38:59Z] Verbose(0) Writing http headers. 13-[2011-03-01 10:38:59Z] Stop(1) Exiting PipelineRunner 13-[2011-03-01 10:38:59Z] Information(0) Pipeline finished.
Anyone out there able to help me with this?
Cheers
Dave
Without log, I'd only provide one simple potential answer. Check what other modules you have defined in IIS and remove (or reorder) the ones that would take a POST to / (such as default documents). A lot of those modules will greedily assume they own the request, causing compat hell.