gpt4 book ai didi

c# - 我可以阻止 RedirectToAction 将路由值添加到查询字符串吗?

转载 作者:行者123 更新时间:2023-11-30 22:16:27 25 4
gpt4 key购买 nike

我正在尝试查看是否可以更改 Mvc 路由以使用基于票证的系统,其中路由是指向外部值字典的 guid 字符串。所以我像这样设置了一条新路线:

routes.Add(new Route("{ticketid}", new Shared.TicketRouteHandler()));

并创建了一个新的路由处理器:

public class TicketRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new TicketHttpHandler(requestContext);
}
}

还有一个新的 HttpHandler 类。在 ProcessRequest 方法中,我从票证中读取 Controller 和操作的值,并将它们放入路由数据集合中:

string ticketidString = this.Request.RouteData.GetRequiredString("ticketid");

var ticket = Shared.Ticket.GetTicket(ticketId);

foreach (var item in ticket)
{
Request.RouteData.Values[item.Key] = item.Value;
}

Controller 从那里像往常一样执行。

在 Controller 中,我让它寻找一个 ticketid 参数,如果没有找到,它会创建一个,并执行 RedirecToAction,用 Controller /操作值填充新的 Ticket:

public ActionResult Index(Guid? ticketid)
{
var ticket = Shared.Ticket.GetOrCreateTicket(ticketid);

if (ticketid == null)
{
//push the new values into the ticket dictionary instead of the route
string controller = "Home";
string action = "Index";
ticket.SetRoute(controller, action);
return RedirectToAction(action, controller, new { ticketid = ticket.Id });
}

return View();
}

一切正常,问题是从重定向操作创建的 URL 如下所示:

http://localhost:49952/df3b9f26-6c1c-42eb-8d0d-178e03b7e6f6?action=Index&controller=Home

为什么 ?action=Index&controller=Home 附加到 url?

如果我删除多余的部分并刷新页面,票证集合中的所有内容都会完美加载。

page loading without the extra querystring values

我想这是在 HttpHandler 代码完成后发生的。

我能做些什么来阻止这种行为?

最佳答案

RedirectToAction 方法发出新请求并更改浏览器中的 URL:

此部分正在更改 URL:

return RedirectToAction(action, controller, new { ticketid = ticket.Id });

1) Return View 不会发出新的请求,它只是在不更改浏览器地址栏中的 URL 的情况下呈现 View 。

2) Return RedirectToAction 发出新的请求,浏览器地址栏中的 URL 被 MVC 生成的 URL 更新。

3) Return Redirect 也会发出新的请求,浏览器地址栏中的 URL 会更新,但你必须指定完整的 URL 才能重定向

4) 在 RedirectToAction 和 Redirect 之间,最佳实践是将 RedirectToAction 用于任何处理您的应用程序操作/ Controller 的事情。如果您使用重定向并提供 URL,您将需要在更改路由表时手动修改这些 URL。

5) RedirectToRoute 重定向到路由表中定义的指定路由。

但是,View 没有,请尝试调整您的代码以返回一个 View!或者,在最坏的情况下,制作一些东西来处理响应中的 URL!

关于c# - 我可以阻止 RedirectToAction 将路由值添加到查询字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368434/

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