如何重定向到在.net-core MVC中调用了另一个操作的View

时间:2019-01-02 23:23:40

标签: c# asp.net-mvc asp.net-core-mvc asp.net-core-2.0

我正在使用ASP.NET Core 2.2 MVC开发项目。这是一个名为 MyView 视图,其中有一个调用 MyAction 动作的链接。

<div>
    <a asp-controller="Home" asp-action="MyAction">my link</a>
</div>

这是 MyAction ,它确实是

public async Task<IActionResult>MyAction(argument1,argument2)
{
    if(a condition)
    {
       it should redirect me to the view which *MyLink* is placed there.
    }
    else
    {
       return false;
    }
}

我想知道如何找到名为 MyAction 的视图(页面)的网址,并重定向到该网址。

这是项目结构(我已经说得很简单)

project structure

  

我发现了这个。但我想在目标操作中添加NOTHING。在.NET Core中不起作用
  How do I redirect to the previous action in ASP.NET MVC?

2 个答案:

答案 0 :(得分:1)

您可以为每个页面使用标题或特定ID。在视图中分配ViewData [“ Title”]之后(或者您可以为每个页面使用特定的ID,而无需分配标题)

@{
    ViewData["Title"] = "MyView";
}



<div>
    <a asp-controller="Home" asp-action="MyAction" asp-route-returnUrl="@ViewData["Title"]" >my link</a>
</div>

然后您就可以使用它了

public async Task<IActionResult>MyAction(string returnUrl)
{


return View(returnUrl)
return RedirectToAction(returnUrl,"YourAction")
}

如果您要对提醒字符串做一些不同的用例区分大小写,例如(重定向动作或任何您喜欢的东西)

switch (returnUrl)
{
case"MyView":
.....
break;
case "YourView":
.....
break;
default:
...
break;
}

答案 1 :(得分:0)

我的解决方案

我做到了。这是您如何重定向到调用该操作的视图。 Mayak 提供了一个很好的解决方案。我只是添加了一些额外的信息以使其安全。正如他/她所说,  首先,您应该将标题分配给所有视图

然后,您应该通过asp-route-returnUrl传递 Path QueryString

@{
     ViewData["Title"] = "MyView";
 }



<div>
    <a asp-controller="Home" asp-action="MyAction" asp-route-returnUrl="@string.Format("{0}{1}",Context.Request.Path, Context.Request.QueryString)" >my link</a>
</div>

然后在 MyAction 中,将returnUrl作为参数传递

  public async Task<IActionResult>MyAction(string returnUrl)
    {
        if(everything is alright)
        {
            return LocalRedirect(returnUrl);
        }

        else
        {
            return false;
        }

    }

有一种叫做开放重定向攻击的东西

https://docs.microsoft.com/en-us/aspnet/core/security/preventing-open-redirects?view=aspnetcore-2.2

您的应用程序从表单接收数据时。它不安全,并且可能会篡改数据以将用户重定向到外部恶意URL。因此,通过使用LocalRedirect,您可以防止开放重定向攻击。