Poul K. Sørensen
Poul K. Sørensen

Reputation: 17560

Parameter binding not working in WebAPI

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

Answers (1)

Eli Algranti
Eli Algranti

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

Related Questions