gpt4 book ai didi

c# - 从 MVC Controller 操作的 URL 中删除序列化模型

转载 作者:行者123 更新时间:2023-11-30 21:57:02 24 4
gpt4 key购买 nike

在我的 Home Controller 中是 Index() 操作。在 Index() 中,我使用当前经过身份验证的用户 ID 从数据库返回一个用户对象:

return View(db.Users.Find(User.UserId));

它工作正常,URL 很简单:

https://localhost:44301/

然而,在 Home Controller 的其他地方,我在一个单独的操作中修改了当前用户并将其传回索引 View ,使用:

return RedirectToAction("Index", user);

当我这样做时,URL 变得杂乱无章,包含用户模型的序列化版本:

https://localhost:44301/Home/Index/4?Name=katrina&Administrator=True&PasswordEncodedHash=1000%3AqzWR8U6poGKshxHDsP%2B5yFhz5AZ01%2Fv1%3ASqCG0SliIpjX0M0jjkQqAf5aunTVS2gx&Tests=System.Collections.Generic.List%601%5BLearningManagementSystem.Models.Test%5D&UserTestAttempts=System.Collections.Generic.List%601%5BLearningManagementSystem.Models.UserTestAttempt%5D&Phones=System.Collections.Generic.List%601%5BLearningManagementSystem.Models.Phone%5D

我想我在重定向操作的方式上做了一些愚蠢的事情,但是我不知道如何解决这个问题。我曾尝试添加自定义路由,但“?Name=....”仍会附加到该路由上。

(编辑)来自其他操作的代码:

public ActionResult ToggleAdministrator()
{
if (Request.IsAuthenticated)
{
var user = db.Users.Find(User.UserId);
user.Administrator = !user.Administrator;
db.SaveChanges();

Response.Cookies.Add(cookie);

return RedirectToAction("Index", user);
}

return RedirectToAction("Index", (User)null);
}

最佳答案

我认为您不需要在使用 RedirectToAction 重定向到某个操作时传递整个数据。

假设您在 Home controller 中有一个操作 Index

Public ActionResult Index(int id)
{
-- write the code here to fetch data based on that id
-- like
var user = db.Users.FirstOrDefault(x=>x.Id = id);
return View(user);
}

现在你只需要像下面这样使用重定向操作:

return RedirectToAction("Index", new { Id= 5 });

注意:

  • 永远不要在 QueryString 或 GET 请求中传递复杂类型的对象

关于c# - 从 MVC Controller 操作的 URL 中删除序列化模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com