【问题标题】:Dynamic Routing with Web API使用 Web API 的动态路由
【发布时间】:2013-06-05 20:39:37
【问题描述】:

我有一个带有 Get 方法的 WebAPI 控制器,如下所示:

public class MyController : ApiController
{
      public ActionResult Get(string id) 
      {
         //do some stuff
      }
}

挑战在于我正在尝试使用 Web API 实现 WebDAV。这意味着当用户向下浏览文件夹结构时,URL 将更改为:

/api/MyController/ParentFolder1/ChildFolder1/item1.txt

有没有办法将该操作路由到 MyController.Get 并提取路径以便我得到:

ParentFolder1/ChildFolder1/item1.txt

谢谢!

【问题讨论】:

    标签: asp.net c#-4.0 asp.net-web-api


    【解决方案1】:

    “动态”路线不是问题。只需使用通配符:

    config.Routes.MapHttpRoute(
        name: "NavApi",
        routeTemplate: "api/my/{*id}",
        defaults: new { controller = "my" }
    );
    

    此路由应添加在默认路由之前。

    问题是您想以文件扩展名结束 URL。它将被解释为对 .txt 文件的静态请求。 在 IIS7+ 中,您可以通过在 web.config 中添加一行来解决这个问题:

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
    

    别忘了,如果你使用MyController,那么路由段就是“我的”

    【讨论】:

    • 太棒了!像冠军一样工作!
    【解决方案2】:

    使用 NuGet 包“AttributeRouting Web API”。您可以为每个操作指定特定路由,包括动态参数。

    我正在处理这个问题,所以请尝试一下,如果您需要更多帮助,请回来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 2015-01-06
      • 1970-01-01
      • 2021-07-06
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多