[英]How can I redirect to the View which called another action in .net-core MVC
我正在使用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并重定向到它。
这是项目结构(我简化了)
我找到了这个。 但我想在目标操作中添加NOTHING。 在.NET Core中不起作用
如何重定向到ASP.NET MVC中的上一个操作?
您可以为每个页面使用标题或特定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;
}
我做的。 这是您如何重定向到调用该操作的视图。 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/zh-cn/aspnet/core/security/preventing-open-redirects?view=aspnetcore-2.2
当您的应用程序从表单接收数据时。 它不安全,并且可能会篡改数据以将用户重定向到外部恶意URL。 因此,通过使用LocalRedirect,可以防止开放重定向攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.