Передача параметров между действиями ASP.NET CORE MVC - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь передать несколько параметров из действия A в действие B.

public IActionResult A(string name){ // some code }
public IActionResult B() { return RedirectToAction("A", new {name = "John" }); }

Это отлично работает. Но я хочу добиться того, чтобы эти параметры не отображались в URL, потому что когда мне нравится приведенный выше пример, мой URL выглядит как http://myapp.com/users?name=John. Я хочу, чтобы URL был ясен без? и следующая строка.

Я пытался использовать TempData[], и он работает локально, но когда я публикую свое приложение в Azure, оно не работает. Пробовал с ViewData[], но обнаружил, что с перенаправлением он пропадает.

Я пытался использовать javascript для разделения URL, но у него есть некоторые ненужные перезагрузки.

Есть ли какой-нибудь способ сделать это, с помощью javascript или .net или чего-то еще? Спасибо

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Вероятно, не самый лучший способ, но, возможно, переменная сеанса? Затем очистите его в пределах A.

public IActionResult A() {
    string name = (string) Session["AsNameFromB"];
    Session["AsNameFromB"] = null;

    //Set in view model if you are using one.
}

public IActionResult B() {
    Session["AsNameFromB"] = "John";
    return RedirectToAction("A");
}

Вы также можете ПОСТАВИТЬ свои данные вместо GET.

0 голосов
/ 03 июня 2019

Я не понимаю, почему вам не нравится использовать ...?name=John&p2=val2 в вашем URL, в то время как ваше действие принимает метод GET ...

В любом случае, вы можете написать это, есливы находитесь в одном контроллере (что не является хорошей практикой)

     public IActionResult A(string name){}
     public IActionResult B(){return A("world");}

или

используйте TempData: здесь ваша проблема будет TempData[] не работать на Azure .Поэтому вам следует настроить согласие на использование файлов cookie следующим образом:

   services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => false;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

Имейте в виду, что вам необходимо очистить навигационные данные браузера, включая файлы cookie, а также принять приложение для хранения / сбора файлов cookie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...