c#Api控制器路由忽略操作

c#Api控制器路由忽略操作,api,asp.net-mvc-4,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</p

我有以下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;
        }
}
当我尝试使用以下URL在浏览器中调用api方法时,它工作正常:

但是如果我输入另一个操作名而不是Verify,那么它也会路由到同一个方法…理想情况下,我希望它出错,因为该操作不存在。因此,如果我进入:
那么最后一个URL应该是错误的…但是它解析到了同一个地方。我的路由配置有错误吗?

MVC中的路由取决于您在配置中指定规则的顺序。在本例中,第二个URL由第一条规则拾取,因为您没有指定要调用的操作,所以它会尝试进行最佳猜测,在本例中,哪一个操作是允许GET请求的唯一可能操作。

Bingo!我已经在第一条规则的路由模板中添加了一个{action},现在似乎正在工作:)config.Routes.maphttprote(名称:“DefaultApi”,routeTemplate:“api/{controller}/{action}/{id}”,默认值:new{id=RouteParameter.Optional});
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}"
            );

        }