Перенаправление на контроллер с параметрами запроса вне контекста контроллера - PullRequest
0 голосов
/ 19 июня 2020

Я довольно долго осмотрелся в Интернете, но не смог найти решения моей текущей затруднительной ситуации. Как следует из названия, я пытаюсь перенаправить пользователя на один из моих контроллеров представления с помощью следующего кода:

// this is in a service that's beyond the Controller scope
httpContext.Response.Redirect("/Login");

Это отлично работает; однако мне также нужно передать параметр запроса. По сути, я хочу сделать что-то вроде этого:

// this is in a service that's beyond the Controller scope
httpContext.Response.Redirect("/Login?NoAccess=true");

Где мой контроллер представления выглядит так:

[AllowAnonymous]
[HttpGet("~/Login")]
public async Task<IActionResult> Index([FromQuery]bool noAccess = false)
{
     // implementation
}

Как можно догадаться, это не работает, и значение не передается моему контроллеру.

Можно ли передать параметры запроса с помощью перенаправления вне контекста контроллера?

Спасибо, Рубен

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Вы можете попробовать

public IActionResult Action()
{
    return Redirect(Url.Action("Index", "ControllerName") + "?noAccess=true"));
}

Кроме того, вы можете попробовать добавить весь URL-адрес, например:

public ActionResult YourAction()
{
    // ...entire url
    return Redirect("http://www.example.com");
}

Даже вы можете вернуть JsonResult с новым URL-адресом и выполнить перенаправление с помощью javascript.

public ActionResult YourAction()
{
    // ...
    return Json(new {url = "http://www.example.com"});
}

$.post("@Url.Action("YourAction")", function(data) {
    window.location = data.url;
});
0 голосов
/ 19 июня 2020

Попробуйте вместо этого использовать RedirectToAction или RedirectToRoute. Вернет IActionResult для перенаправления. С его помощью вы можете указать объект с параметрами. Как это:

public IActionResult Action()
{
    return this.RedirectToAction("Index", "ControllerName", new {
        noAccess = true
    });
}
...