当我向以下对象发送请求时,为什么Web api将请求映射到第二种方法(签名为“ public string Get(string y =“ 1”)”的第二种方法) http://localhost:55833/api/values/1
为什么不先执行int x。
如果删除第二个get方法,则会显示错误消息:
<Error>
<Message>
The requested resource does not support http method 'GET'.
</Message>
</Error>
我试图理解为什么出现这种情况。 下面是我的代码。
public class ValuesController : ApiController
{
public static List<string> values = new List<string> { "Tim","Charlie" };
// GET api/values
public IEnumerable<string> Get(int x)
{
return values;
}
public string Get(string y="1")
{
return values[1];
}
}
WebApiConfig.cs文件:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
答案 0 :(得分:1)
如果您将第一种方法中的参数名称从“ x”更改为“ id”,则会对其进行调用。请注意,您的路线中有{id}个片段。
当前,在第二种方法中,字符串参数是可选的,因此,即使您使用整数ID进行调用,该字符串参数也将映射到第二种方法,其中“ y”参数值为null。