C# 如何通过路由强制执行显式URL?

C# 如何通过路由强制执行显式URL?,c#,.net,asp.net-mvc,rest,C#,.net,Asp.net Mvc,Rest,我有一个用户模型和一个UsersController;它们看起来像这样: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default",

我有一个用户模型和一个UsersController;它们看起来像这样:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "api/{controller}/{action}/{id}",
            defaults: new { id = UrlParameter.Optional }
        );
    }
}
型号:

public class User
{
    public string UsernName { get; set; }
}
控制器:

public class UsersController : ApiController
{
    User[] users = new User[]
    {
        new User { UsernName = "SomeUser123" }
    };

    [HttpGet]
    public IEnumerable<User> GetAllUsers()
    {
        return users;
    }
}
我期望的是,我只能通过以下url访问我的GetAllUsers():

api/users/GetAllUsers
相反,我发现我还可以通过以下方式访问此方法:

api/users/

如何强制API只能通过使用方法的完整路径访问?

我找到了解决方案。事实证明,VisualStudio使用Web API模板创建的RouteConfig类并不是唯一存在路由信息的地方。带我到我更改的WebApiConfig类:

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

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