带有routeValues和Route Template的RedirectToAction添加查询字符串

问题描述 投票:0回答:1

我正在使用几个控制器执行 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
的顺序似乎没有区别)

我能做些什么来帮助/推动我期望的比赛?

asp.net-core-mvc asp.net-core-routing
1个回答
0
投票

尝试使用正则表达式:

[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";
}

路线限制

© www.soinside.com 2019 - 2024. All rights reserved.