首页 > 解决方案 > 在 web api 端点中将 url 路径作为参数传递

问题描述

我有这个控制器,它有一种接收两个变量的方法。一是文化,二是道路。

public class WebsiteContentController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Test(string culture, string path)
    {
        var result = DoStuff(culture, path);

        return result;
    }
}

我在这个例子中称之为:

/Api/WebsiteContent/Test?path=/quem-somos/a-marca/&culture=pt
/Api/WebsiteContent/Test?path=/quem-somos/&culture=pt
/Api/WebsiteContent/Test?path=/quem-somos/something/something/&culture=pt

我喜欢做的是创建一个与此类似的端点:

/Api/WebsiteContent/Test/pt/quem-somos/a-marca/

有没有办法用这种格式调用端点?

标签: c#asp.net-web-api2asp.net-web-api-routing

解决方案


只有这样的路由才能用于 url ".../Api/WebsiteContent/Test/pt/quem-somos/a-marca"

[HttpGet("{culture/path1/path2}")]
public HttpResponseMessage Test(string culture, string path1, string path2)
{
  var path="/"+ path1+"/"+path2+"/";
}

或者也许像这样的灵活路径

[HttpGet("{culture/path1?/path2?/path3?/patch4?}")]
public HttpResponseMessage Test(string culture, string path1, string path2
string path3, string path4)

如果您使用旧的网络版本,请将 MapMvcAttributeRoutes 添加到 RegisterRoutes

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
 
    routes.MapMvcAttributeRoutes();
 
    routes.MapRoute(
        name: “Default”,
        url: “api/{controller}/{action}/{id}”,
        defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }
    );
}

推荐阅读