我有一个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?
答案 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 }
);