传递url路径作为web api端点的参数



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

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/

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

只有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)

如果你使用旧的net版本,添加mapmvcattributerroutes到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 }
);
}

你可以使用RouteAttribute模板。

它看起来像这样。

[Route("API/V1/{varible1}/{varible2}")]
public async Task<string> APIAsync(string varible1, string varible2)
{
//do things here
}

你可以自定义路由,抓取你需要的变量,并添加静态路由,就像我上面的API/V1一样。