我有这个控制器,它有一个接收两个变量的方法。一个是文化,一个是道路。
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一样。