为什么Redirect()函数尝试在同一控制器内重定向我

时间:2018-10-19 13:23:58

标签: c# asp.net-mvc

我正在通过串联许多字符串变量来构建返回URL,但是为了进行测试,我使用了测试字符串。

它可以在帐户控制器的登录功能中完美运行:

[HttpPost]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    /* irrelevant code lines */

    return Redirect( "SuiviFinancier/Niveau2?unitAdm=012"    /*returnUrl*/);
}

此重定向到正确的路线: / SuiviFinancier / Niveau2?unitAdm = 012

但是该重定向功能在另一个控制器中使用,使其自动在字符串(例如)之前添加控制器名称:

public class paramsVisuelController : Controller
{

    [HttpPost]
    public ActionResult Options(ParamsVisuel model)
    {
        return Redirect( "SuiviFinancier/Niveau2?unitAdm=012" );

    }
}

此处的输出路径为: / paramsVisuel / SuiviFinancier / Niveau2?unitAdm = 012

那是为什么? MVC是在我的字符串之前添加控制器名称吗?但是我不想要那个。这是一条包含控制器的完整路由,为什么我要在其之前添加当前控制器名称?这是无意义的。

  

说明:HTTP 404。

     

URL要求:/ paramsVisuel / SuiviFinancier / Niveau2

1 个答案:

答案 0 :(得分:1)

通常,应该使用此功能进行重定向:

RedirectToAction("Niveau2", "SuiviFinancier", new { unitAdm = 012 });

这是经典的MVC重定向到控制器中动作的方法。

但是,如果由于某种原因,您需要redirect()函数才能正常工作,请不要忘记以完整的路径开始使用斜线开头的字符串:

return Redirect( "/SuiviFinancier/Niveau2?unitAdm=012");

或斜线和斜线:

return Redirect( "~/SuiviFinancier/Niveau2?unitAdm=012");