【问题标题】:How can I redirect to the View which called another action in .net-core MVC如何重定向到在 .net-core MVC 中调用另一个操作的视图
【发布时间】:2019-01-02 23:23:39
【问题描述】:

我正在使用 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 的视图(页面)的 url 并重定向到它。

这是项目结构(我把它简单化了)

project structure

我找到了这个。但我不想在目标操作中添加任何内容。它在 .NET Core 中不起作用
How do I redirect to the previous action in ASP.NET MVC?

【问题讨论】:

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


【解决方案1】:

我的解决方案

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

然后你应该通过 asp-route-returnUrl 传递 PathQueryString

@{
     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,您可以防止开放重定向攻击。

【讨论】:

    【解决方案2】:

    您可以为每个页面使用标题或特定 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")
    }
    

    如果你要为提醒字符串做一些不同的事情,比如(redirecttoaction 或任何你喜欢的)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多