我正在通过 Web API 使用属性路由,如果我使用以下 Controller 请求 URL /myapi/list,一切都会按预期工作:
[RoutePrefix("myapi")]
public class MyController : ApiController
{
[HttpGet]
[Route("list")]
public async Task<string> Get()
{
// Return result
}
}
但是,我希望我的 Get() 方法成为默认方法,即在请求 URL /myapi 时(不带 <强>/列表部分)。
但是如果我像这样删除 Route 属性的 "list" 部分...
[RoutePrefix("myapi")]
public class MyController : ApiController
{
[HttpGet]
[Route] // Default route
public async Task<string> Get()
{
// Return result
}
}
...我收到 403.14 错误,内容为
"The Web server is configured to not list the contents of this directory."
有什么想法可能导致这种情况吗?
谢谢!
编辑:如果我使用默认路由模式(如 /api/myapi)请求 API Controller ,它会映射到 Get()方法符合预期。
默认路由在属性routes之后注册:
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() { ... }
}
关于asp.net - 使用 ASP.NET MVC 属性路由时的默认路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967768/