我知道通过 /api/values/1 可以定位到 ValuesController.Get(int id)这个方法
我的问题是那 直接这么请求 /values/get/1 为啥报错呢? 我看项目中也有注册这个路由啊
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
1
sxw11 2017-11-21 17:25:38 +08:00
你贴的这个是 MVC 的路由,然而 webapi 项目走的是 WebApiConfig 的 Route
|
2
sxw11 2017-11-21 17:27:19 +08:00
|
3
azev OP 是得 默认新建的 webapi 项目中是包含了那个 WebApiConfig
但是也包含了默认的路由模板啊 就是我主贴里贴的那段 我的理解是两种 url 应该都可以访问到那个 action,可现在却是只有一种 url 能正常访问 另一个就报错 |
4
sxw11 2017-11-21 17:54:06 +08:00
MVC action 是你的方法名,webapi 里 action 是 http 的四种方法,不是一个东西,去看看二楼的文章,很详细的。。
|
5
azev OP 那文章看过了 但是不能解释我的问题
"webapi 里 action 是 http 的四种方法" 为什么那个 get 函数不能视为一个 action 的名字呢? |
6
aaronlam 2018-03-08 10:03:17 +08:00
楼主你现在贴的这个是 MVC 的路由,你要去 WebApiConfig.cs 里把默认的 WebApi 路由改成这样才能实现你想要的效果:
``` public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", //routeTemplate: "api/{controller}/{id}", routeTemplate: "{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional} ); // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。 // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。 // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。 //config.EnableQuerySupport(); // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行 // 有关详细信息,请参阅: http://www.asp.net/web-api config.EnableSystemDiagnosticsTracing(); } } ``` |