我正在使用几个控制器执行 Post-Redirect-Get 模式,但我在
RedirectToAction
部分遇到了问题。这是一些示例代码,其中仅包含重定向部分以显示行为:
public class TestController : Controller
{
[Route("{ID1}/Test")]
[Route("{ID2}/{ID1}/Test")]
public IActionResult Test(string id1, string id2)
{
return RedirectToAction("Redirected", new { ID1 = id1, ID2 = id2 });
}
[Route("{ID1}/Redirected")]
[Route("{ID2}/{ID1}/Redirected")]
public string Redirected()
{
return "Redirected";
}
}
如果我请求
/a/test
,我会被重定向到 /a/Redirected
,就像我期望/想要的那样。
如果我请求
/a/b/test
,我会被重定向到/b/Redirected?ID2=a
,这不是我所期望或想要的!
我希望被重定向到
/a/b/Redirected
。
为什么第二条指定的Route无法匹配? (注意,指定
Routes
的顺序似乎没有区别)
我能做些什么来帮助/推动我期望的比赛?
尝试使用正则表达式:
[Route(@"{id1:regex(.*$)}/{id2:regex(.*$)}/{action}")]
[Route(@"{id1:regex(.*$)}/{action}")]
public IActionResult Test(string id1, string id2)
{
return RedirectToAction("Redirected", routeValues:new { ID1 = id1, ID2 = id2 });
}
[Route(@"{id1:regex(.*$)}/{id2:regex(.*$)}/{action}")]
[Route(@"{id1:regex(.*$)}/{action}")]
public string Redirected()
{
var parameters = this.HttpContext.GetRouteData();
return "Redirected";
}