我有一个API控制器删除“API”从网络API网址前缀
public class MyController : ApiController { ... }
默认情况下它被映射到URL mysite/api/My/Method
,我想它有没有URL“API”前缀: mysite/My/Method
设置控制器属性[RoutePrefix("")]
没有帮助我。
还有其他方法可以实现吗?
我有一个API控制器删除“API”从网络API网址前缀
public class MyController : ApiController { ... }
默认情况下它被映射到URL mysite/api/My/Method
,我想它有没有URL“API”前缀: mysite/My/Method
设置控制器属性[RoutePrefix("")]
没有帮助我。
还有其他方法可以实现吗?
默认的注册通常在WebApiConfig
发现往往看起来像这样
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 }
);
}
}
您需要在以公约为基础设置编辑routeTemplate
。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
请注意,如果这个项目与MVC共享,对于api
前缀的原因是为了避免两个框架之间的路线冲突。如果Web API是唯一被使用的东西,那么应该没有问题。
我只想提到默认的AccountController有'[RoutePrefix(“api/Account”)]',所以为了使这个控制器也能工作,你需要从这里删除'api /'。 –
'api'字在WebApiConfig静态类的Register方法中配置。 – Fabio
您是使用属性路由还是基于约定的路由? – Nkosi