Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ASP.NET MVC属性路由时的默认路由_Asp.net_Asp.net Mvc_Asp.net Web Api_Asp.net Web Api2_Attributerouting - Fatal编程技术网

使用ASP.NET MVC属性路由时的默认路由

使用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

我正在使用Web API的属性路由,如果我使用以下控制器请求URL/myapi/list,一切都会正常工作:

[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() { ... }
}