Reputation: 17560
For below two controllers, /api/container/dasdada
is returning "a". If I do a container?value=hello
I do get "hello". What can cause the parameter binding not to work?
public HttpResponseMessage Get()
{
return Request.CreateResponse<string>("a");
}
public HttpResponseMessage Get(string value)
{
return Request.CreateResponse<string>(value);
}
I am using Katana to host it:
HttpConfiguration apiConfig = new HttpConfiguration();
apiConfig.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
apiConfig.Formatters.Remove(apiConfig.Formatters.XmlFormatter);
apiConfig.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
app.UseDependencyResolver(resolver)
.UseWebApiWithOwinDependencyResolver(resolver, apiConfig);
app.UseWebApi(apiConfig);
Upvotes: 1
Views: 460
Reputation: 9007
You need a method with a parameter called id
for "id" to bind:
public HttpResponseMessage Get(string id) { return Request.CreateResponse<string>(id); }
Should return "dasdada" when you access /api/container/dasdada
if you want both parameters to bind you can have a method:
public HttpResponseMessage Get(string id, string value) { return Request.CreateResponse<string>(id + ":" + value); }
This should return "dasdada:hello" for /api/container/dasdada?value=hello.
Upvotes: 1