C# 如何通过路由强制执行显式URL?
我有一个用户模型和一个UsersController;它们看起来像这样: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",
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 }
);