ASP.NET MVC 路由不适用于前缀 "api"
ASP.NET MVC Routing doesn't work with a prefix "api"
我是 mvc 的新手,我在这里尝试在 URL 模式中添加 api 前缀,后跟控制器、操作和身份证。
但是事情并没有像我预期的那样工作。
我有一个名为 "Activity" 的控制器,
使用方法 "Query"
public class ActivityController : Controller
{
...
[HttpGet]
public JsonResult Query(int limit = DEFAULT_LIMIT,
int offset = DEFAULT_OFFSET)
{
repository.apiInfo.data = repository.readActivities(limit, offset);
return Json(repository.apiInfo ,
JsonRequestBehavior.AllowGet);
}
...
}
然后我定义了一个路由映射规则来尝试调用 Query(),例如:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "MyRule",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Activity", action = "Query", id = UrlParameter.Optional }
);
}
我确定它已在 Application_Start() 方法中注册,
以及它在没有 api 前缀的情况下也能正常工作。
但结果显示消息
"Cannot find the url 'http://localhost:49571/api'"
"Cannot find the Activity controller."
请告诉我我错过了什么。
试试这个
public class ActivityController : ApiController
您很可能已经启用了 Web API,其路由在 MVC 路由之前注册。这意味着任何前缀为 api
的呼叫都将路由到您的网络 api,因为第一场比赛在路由 table.
中获胜
在项目中寻找以下class
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
注意 DefaultApi
路线。
删除上述路由或更改 MVC 路由集合正在使用的路由。
我是 mvc 的新手,我在这里尝试在 URL 模式中添加 api 前缀,后跟控制器、操作和身份证。
但是事情并没有像我预期的那样工作。
我有一个名为 "Activity" 的控制器, 使用方法 "Query"
public class ActivityController : Controller
{
...
[HttpGet]
public JsonResult Query(int limit = DEFAULT_LIMIT,
int offset = DEFAULT_OFFSET)
{
repository.apiInfo.data = repository.readActivities(limit, offset);
return Json(repository.apiInfo ,
JsonRequestBehavior.AllowGet);
}
...
}
然后我定义了一个路由映射规则来尝试调用 Query(),例如:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "MyRule",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Activity", action = "Query", id = UrlParameter.Optional }
);
}
我确定它已在 Application_Start() 方法中注册, 以及它在没有 api 前缀的情况下也能正常工作。
但结果显示消息
"Cannot find the url 'http://localhost:49571/api'"
"Cannot find the Activity controller."
请告诉我我错过了什么。
试试这个
public class ActivityController : ApiController
您很可能已经启用了 Web API,其路由在 MVC 路由之前注册。这意味着任何前缀为 api
的呼叫都将路由到您的网络 api,因为第一场比赛在路由 table.
在项目中寻找以下class
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
注意 DefaultApi
路线。
删除上述路由或更改 MVC 路由集合正在使用的路由。