使用ASP.NET MVC属性路由时的默认路由
我正在使用Web API的属性路由,如果我使用以下控制器请求URL/myapi/list,一切都会正常工作:使用ASP.NET MVC属性路由时的默认路由,asp.net,asp.net-mvc,asp.net-web-api,asp.net-web-api2,attributerouting,Asp.net,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api2,Attributerouting,我正在使用Web API的属性路由,如果我使用以下控制器请求URL/myapi/list,一切都会正常工作: [RoutePrefix("myapi")] public class MyController : ApiController { [HttpGet] [Route("list")] public async Task<string> Get() { // Return result } } 使用 对于默认路线 [Ro
[RoutePrefix("myapi")]
public class MyController : ApiController
{
[HttpGet]
[Route("list")]
public async Task<string> Get()
{
// Return result
}
}
使用
对于默认路线
[RoutePrefix("myapi")]
public class MyController : ApiController
{
//GET myapi
[HttpGet]
[Route("")] // Default route
public async Task<string> Get() { ... }
}
[RoutePrefix(“myapi”)]
公共类MyController:ApiController
{
//获取myapi
[HttpGet]
[路由(“”)//默认路由
公共异步任务Get(){…}
}
参考资料:正如在评论中所指出的:问题是我有一个物理文件夹,与同名,作为路由前缀
重命名文件夹或路由前缀解决了此问题
我想另一种选择是调整路由/处理程序顺序,以确保属性路由优先于物理路径。谢谢@Nkosi,但我似乎缺少一个名为Default的属性?这是一个输入错误。对不起,好的!:)我尝试使用“”和“~/”作为Route属性的参数,但结果相同:/上述代码将起作用。如果没有,则问题存在于控制器之外。你想要哪个URL,或者你的问题中的两个都有?我想要没有前缀的URL,所以只需要/myapi。你有一个名为
myapi
的物理/虚拟目录吗?@haim770-Hmm,确实,这似乎是问题所在!如果重命名路由前缀,默认路由将按预期工作!非常感谢你的帮助!请随意将其作为答案发布,我将接受它。:)它只是提醒我-不确定它是否符合重复的条件,但另一种可能的解决方案是使用routes.routeeExistingFiles=true
,正如我链接到的答案中提到的那样
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
[Route("")]
[RoutePrefix("myapi")]
public class MyController : ApiController
{
//GET myapi
[HttpGet]
[Route("")] // Default route
public async Task<string> Get() { ... }
}