如何通过路由强制显式网址?

时间:2014-05-04 02:39:45

标签: c# .net asp.net-mvc rest

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

型号:

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;
    }
}

我的路线设置如下:

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 }
        );
    }
}

我期待的是我只能通过此网址访问我的GetAllUsers():

api/users/GetAllUsers

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

api/users/

如何仅使用方法的完整路径强制访问API?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。事实证明,Visual Studio使用Web API模板创建的RouteConfig类并不是唯一存在路由信息的地方。 This article引导我进入我改变的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 }
        );