1

对于以下两个控制器,/api/container/dasdada返回“a”。如果我这样做,container?value=hello我会得到“你好”。什么会导致参数绑定不起作用?

public HttpResponseMessage Get()
{
    return Request.CreateResponse<string>("a");
}
public HttpResponseMessage Get(string value)
{
    return Request.CreateResponse<string>(value);
}

我正在使用 Katana 来托管它:

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);
4

1 回答 1

1

您需要一个带有称为id“id”的参数的方法来绑定:

公共 HttpResponseMessage 获取(字符串 id)
{
   返回 Request.CreateResponse<string>(id);
}

访问 /api/container/dasdada 时应返回“dasdada”

如果你想绑定两个参数,你可以有一个方法:

公共 HttpResponseMessage 获取(字符串 id,字符串值)
{
   return Request.CreateResponse<string>(id + ":" + value);
}

这应该为 /api/container/dasdada?value=hello 返回“dasdada:hello”。

于 2013-09-15T23:43:30.210 回答