Как я могу перенаправить на View, который вызвал другое действие в .net-core MVC - PullRequest
0 голосов
/ 03 января 2019

Я занимаюсь разработкой проекта с ASP.NET Core 2.2 MVC. Вот представление с именем MyView , в котором есть ссылка, которая вызывает MyAction action.

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

Я хочу знать, как я могу найти URL представления (страницы) с именем MyAction и перенаправить на него.

Это структура проекта (я сделал это просто)

структура проекта

Я нашел это. Но я хочу НИЧЕГО не добавить к целевому действию. Это не работает в .NET Core
Как перенаправить на предыдущее действие в ASP.NET MVC?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Мое решение

Я сделал это. Вот как вы можете перенаправить на представление, которое вызвало действие. Маяк предоставил хорошее решение для этого. Я просто добавил дополнительную информацию, чтобы сделать ее безопасной. Как он / она сказал, во-первых, вы должны присвоить название всем представлениям .

И после этого вы должны передать Path и QueryString Через asp-route-returnUrl.

@{
     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, вы можете предотвратить атаки с открытым перенаправлением.

0 голосов
/ 03 января 2019

Вы можете использовать заголовок или конкретный идентификатор для каждой страницы. После того, как вы присвоили ViewData ["Заголовок"] в представлении (или вы можете использовать определенный идентификатор для каждой страницы без назначения заголовка)

@{
    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;
}
...