【问题标题】:C# MVC - RedirectToAction method encode query parameterC# MVC - RedirectToAction 方法编码查询参数
【发布时间】:2018-01-08 17:00:58
【问题描述】:

我将尝试使用RedirectToAction MVC 方法从另一个操作方法重定向到一个操作方法。目标操作方法接受查询参数。当我调用目标方法时,查询参数会被 Url 编码。

目标方法具有以下签名:

[Route("\resource\{id}")]
public ActionResult DestMethod(int id, string token)

我使用 RedirectToAction 从另一个操作方法调用此方法,如下所示

RedirectToAction("DestMethod", new {id = id, token = token});

所以当控件进入 DestMethod 时,token 参数得到 Url Encoded。

这种行为的原因是什么以及如何预防?

编辑:

如果我从RidirectToAction 发送令牌参数,即没有Url 编码,DestMethod 将接收它作为编码并且不解码它。这是令人困惑的行为。如果我从 jquery ajax 发送编码参数,一切正常。

【问题讨论】:

    标签: c# asp.net-mvc redirect url-encoding


    【解决方案1】:

    需要Url Encoding来确保地址按照标准是正确的(Uniform Resource Identifier (URI)似乎是那个)。如果参数未编码,则无法保证浏览器会正确执行,并且重定向实际上包含整个令牌参数。

    由于 MVC 应该自动解码传入的,编码传出参数应该是所有正常情况下想要的行为。我能想到的唯一不想要的情况是,如果令牌已经是 URL 编码的,那么我建议您在 RedirectToAction 中使用它之前解码令牌。

    【讨论】:

    • 如果我从RidirectToAction 发送令牌参数,即没有Url 编码,DestMethod 将接收它作为编码并且不解码它。这是令人困惑的行为。如果我从 jquery ajax 发送编码参数,一切正常。我已经添加了对相同问题的编辑
    • 据我了解,这似乎是导致它无法正确解码的路线,请参阅github.com/aspnet/Mvc/issues/4599
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2017-11-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多