MVC C# 自定义路由
MVC C# custom Routing
我有一个Controller
叫api
,下面的
routes.MapRoute(
name: "api",
url: "api/",
defaults: new { controller = "api" }
);
在控制器内部我有一个动作如下
[Route("fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id)
{
return null;
}
return null
只是为了测试一下,我正在尝试在其上设置断点
但是当我尝试访问 http://localhost:50593/api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
之类的内容时,我发现 url 未找到
您在 Route
属性中定义的路由模式不包含术语 "api"
。因此,根据您当前的路线定义,以下请求将起作用。
yourSiteBaseUrl/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
或者您可以在路由定义中添加术语 api。
public class apiController : Controller
{
[Route("api/fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id)
{
return Content(id.ToString());
}
}
或在控制器级别使用 RoutePrefix
属性
[RoutePrefix("api")]
public class apiController : Controller
{
[Route("fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id)
{
return Content(id.ToString());
}
}
现在它适用于以下 url
yourSiteBaseUrl/api/fleet/0a5bb04d-4247-4cf6-8f96-2ce49325b5a7/selectedfleet
首先你需要确保如果你想在 MVC 中使用属性路由,它是启用的。
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); //<--IMPORTANT for attribute routing in MVC
// Convention-based routing.
//...other code removed for brevity
}
}
当尝试通过属性路由访问 http://localhost:50593/api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
之类的内容时,您需要确保控制器定义了正确的路由模板来匹配请求。
[RoutePrefix("api")]
public class ApiController : Controller {
//GET api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
[HttpGet]
[Route("fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id) { ... }
}
确保您的控制器和路由不冲突 Web API 路由,如果您将它包含在 MVC 项目中。
我有一个Controller
叫api
,下面的
routes.MapRoute(
name: "api",
url: "api/",
defaults: new { controller = "api" }
);
在控制器内部我有一个动作如下
[Route("fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id)
{
return null;
}
return null
只是为了测试一下,我正在尝试在其上设置断点
但是当我尝试访问 http://localhost:50593/api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
您在 Route
属性中定义的路由模式不包含术语 "api"
。因此,根据您当前的路线定义,以下请求将起作用。
yourSiteBaseUrl/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
或者您可以在路由定义中添加术语 api。
public class apiController : Controller
{
[Route("api/fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id)
{
return Content(id.ToString());
}
}
或在控制器级别使用 RoutePrefix
属性
[RoutePrefix("api")]
public class apiController : Controller
{
[Route("fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id)
{
return Content(id.ToString());
}
}
现在它适用于以下 url
yourSiteBaseUrl/api/fleet/0a5bb04d-4247-4cf6-8f96-2ce49325b5a7/selectedfleet
首先你需要确保如果你想在 MVC 中使用属性路由,它是启用的。
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); //<--IMPORTANT for attribute routing in MVC
// Convention-based routing.
//...other code removed for brevity
}
}
当尝试通过属性路由访问 http://localhost:50593/api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
之类的内容时,您需要确保控制器定义了正确的路由模板来匹配请求。
[RoutePrefix("api")]
public class ApiController : Controller {
//GET api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet
[HttpGet]
[Route("fleet/{id:guid}/selectedfleet")]
public ActionResult selectedfleet(Guid id) { ... }
}
确保您的控制器和路由不冲突 Web API 路由,如果您将它包含在 MVC 项目中。