我正在通过Web API使用属性路由,并且如果我使用以下控制器请求URL / myapi / list,一切都会按预期进行:
[RoutePrefix("myapi")]
public class MyController : ApiController
{
[HttpGet]
[Route("list")]
public async Task<string> Get()
{
// Return result
}
}
但是,我希望我的Get()方法是默认的,即当请求URL / myapi时(没有/ list部分)。
但是,如果我像这样删除Route属性的“列表”部分,则...
[RoutePrefix("myapi")]
public class MyController : ApiController
{
[HttpGet]
[Route] // Default route
public async Task<string> Get()
{
// Return result
}
}
...我收到403.14错误消息
“ Web服务器被配置为不列出此目录的内容。”
关于什么可能导致此的任何想法?
谢谢!
编辑:如果我使用/ api / myapi之类的默认路由模式请求API控制器,则它会按预期映射到Get()方法。
默认路由在属性路由之后注册:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
正如haim770在评论中指出的那样:问题是我有一个与路由前缀同名的物理文件夹。
重命名文件夹或路由前缀可以解决此问题。
我猜想有一种替代方法是调整路由/处理程序的顺序,以确保属性路由优先于物理路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句