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

标签 asp.net asp.net-mvc asp.net-web-api asp.net-web-api2 attributerouting

我正在通过 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() { ... }
}

引用:Attribute Routing in ASP.NET Web API 2 : Route Prefixes

关于asp.net - 使用 ASP.NET MVC 属性路由时的默认路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967768/

相关文章:

asp.net - 如何将数据库字段值绑定(bind)到 gridview 中的隐藏字段

.net - 全局覆盖特定文化的所有实例的月份名称

javascript - JavaScript 中的 MVC (Razor) 语法

asp.net-mvc - asp.net mvc 无法访问基本 Controller 中的 cookie 数据

c# - HttpActionContext 唯一请求标识符

c# - 返回 HttpResponseMessage 的 Web API 最佳方法

c# - ASP :ListBox Get Selected Items - One Liner?

c# - 复选框列表选中的值

javascript - 为什么动态添加的 View 输入字段无法在主视图上附加 jQuery 事件

asp.net-web-api - NewtonJson.NET 版本 4.0.8.0 的 RavenDb 客户端问题