【问题标题】:Why mozilla changes the characters when i use the .net mvc statement redirect?为什么当我使用 .net mvc 语句重定向时 Mozilla 会更改字符?
【发布时间】:2015-06-15 21:01:47
【问题描述】:

我正在尝试在一切完成后重定向到外部网站,但 Firefox 将 url 上的 http 单词更改为一组奇怪的字符。这是我的服务器端代码:

    [HttpPost]
    public ActionResult Postular(INFO_BASE_POSTULACION_model pInfoPostulacion) {
        string rutMD5 = Request["rutMD5"];
        int idRegion = Convert.ToInt32(Request["idRegion"]);
        int idInstrumento = Convert.ToInt32(Request["idInstrumento"]);
        string urlDestino = "";

        try
        {
            #region VALIDACION DE DATOS

            if (!ModelState.IsValid) {
                TempData["ModelState"] = ModelState;
                return RedirectToAction("Index", new { data = Utilidades.Base64Encode(rutMD5 + ";" + idRegion + ";" + idInstrumento) });
            }
            #endregion

            INFO_BASE_POSTULACION nuevaInfoBasePostulacion = new INFO_BASE_POSTULACION();
            nuevaInfoBasePostulacion = pInfoPostulacion.modeloToDTO(pInfoPostulacion);
            nuevaInfoBasePostulacion.TOKEN = Utilidades.GenerarStringUnico();
            nuevaInfoBasePostulacion.INFO_REGISTRO_ELIMINADO = false;
            nuevaInfoBasePostulacion.FECHA_CREACION = DateTime.Now;
            Boolean todoOK = new InfoBasePostulacionBO().Agregar(nuevaInfoBasePostulacion);

            if (!todoOK)
            {
                ModelState.AddModelError(String.Empty, "Ocurrió un error al intentar guardar la información.");
                TempData["ModelState"] = ModelState;
                return RedirectToAction("Index", new { data = Utilidades.Base64Encode(rutMD5 + ";" + idRegion + ";" + idInstrumento) });
            }

            string token = nuevaInfoBasePostulacion.TOKEN;
            string idFormulario = Convert.ToString(nuevaInfoBasePostulacion.ID_FORMULARIO_POSTULACION);
            string nombreParamToken = ConfigurationManager.AppSettings["ProActiveOffice-paramNombre-Token"];
            string nombreParamIdFormulario = ConfigurationManager.AppSettings["ProActiveOffice-paramNombre-IdFormulario"];
            urlDestino = ConfigurationManager.AppSettings["ProActiveOffice-URL"] + "?" + nombreParamToken + "=" + token + "&" + nombreParamIdFormulario + "=" + idFormulario;

            //Here i had yo use the uriBuilder because i couldn't make it work on any other way.
            UriBuilder uri = new UriBuilder(urlDestino.Trim());

                //Here i redirect to an external website.
            return Redirect(uri.Uri.ToString());
        }
        catch (Exception ex)
        {
            log.Error("Error al intentar guardar info base de postulación", ex);
            ModelState.AddModelError(String.Empty, "Ocurrió un error al intentar guardar la información.");
            TempData["ModelState"] = ModelState;
            return RedirectToAction("Index", new { data = Utilidades.Base64Encode(rutMD5 + ";" + idRegion + ";" + idInstrumento) });
        }

    }

这里可以看到调试:

1-在这里您可以看到我拥有的 url 字符串(我不得不删除“http://”,因为它无法与 uri builder 一起正常工作):

2-在这里您可以看到带有字符串 url 的 uri 构建器的值:

3-这里你看到toString()方法适用于uri(我已经使用了绝对uri属性):

4-现在终于出现错误了。 http 字已更改为一组字符:

我在重定向方面遇到了很多问题。这些代码目前在 Chrome 上运行,但在 firefox 上给我这些错误。

会是什么?

顺便说一句,我使用的是 Visual Studio 2013 + .NET Framerowk 4.5 + MVC4

【问题讨论】:

  • 您确定您的ProActiveOffice-URL 应用程序设置中没有任何垃圾吗?您可能在该 URL 的开头有一个零宽度空格。
  • 我删除了 web.config (ProActiveOffice-URL) 的设置,然后我从头开始添加它并且它起作用了,所以我猜它是一种不可见的空间。谢谢你们。

标签: c# asp.net-mvc-4 redirect mozilla


【解决方案1】:

%E2%80%8B 是一个 URL 编码、UTF-8 编码的零宽度空格字符。您可能在应用程序设置文件中隐藏了一个 ProActiveOffice-URL 值。如果您从某个地方复制了 URL,它可能是以这种方式粘贴的。

【讨论】:

  • No i.dont have space 实际上,如果您仔细查看代码,您会注意到,当我实例化 uri 构建器时,在 url 字符串上使用 trim 函数以避免空格问题,所以它必须是别的东西。
  • 我删除了 web.config (ProActiveOffice-URL) 的设置,然后我从头开始添加它并且它起作用了,所以我猜它是一种不可见的空间。谢谢你们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2022-11-14
相关资源
最近更新 更多