c#Api Controller路由忽略了Action

时间:2015-10-11 15:26:46

标签: api asp.net-mvc-4

我有以下Api类和方法:

public class LicenceController : ApiController
    {
        /// <summary>
        /// Checks whether the person has a verified licence
        /// </summary>
        /// <param name="forename">Person's first name</param>
        /// <param name="surname">Person's second name</param>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        public bool Verify(string forename, string surname)
        {
            return true;
        }
}

以下WebApiConfig.cs

public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: "Verify",
                routeTemplate: "api/{controller}/{action}/{forename}/{surname}/{licence}"
            );

        }

当我尝试使用以下URL在浏览器中调用我的api方法时,它可以正常工作: http://localhost/api/Licence/Verify?forename=Sam&surname=Jones

但是如果我输入另一个动作名称而不是Verify,那么它也会路由到同一个方法...理想情况下我喜欢它的错误,因为动作不存在。所以,如果我输入: http://localhost/api/Licence/ThisActionDoesntExist?forename=Sam&surname=Jones 然后最后一个URL应该出错...但它解析到同一个地方。我的路由配置有错误吗?

1 个答案:

答案 0 :(得分:0)

MVC中的路由取决于您在配置中指定规则的顺序。在这种情况下,第二个网址会被第一个规则选中,因为您没有指定要调用的操作,它会尝试进行最佳猜测在这种情况下,唯一可能允许GET请求的操作。