为什么我的Web api将get请求映射到api控制器中的第二个方法而不是第一个方法?

时间:2018-06-20 03:04:07

标签: asp.net asp.net-web-api

当我向以下对象发送请求时,为什么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 }
        );

    }
}

1 个答案:

答案 0 :(得分:1)

如果您将第一种方法中的参数名称从“ x”更改为“ id”,则会对其进行调用。请注意,您的路线中有{id}个片段。

当前,在第二种方法中,字符串参数是可选的,因此,即使您使用整数ID进行调用,该字符串参数也将映射到第二种方法,其中“ y”参数值为null。