传递一个查询字符串与空间?(Passing in a querystring with a spac

2019-10-18 07:57发布

我有一个这样的动作:

public ActionResult UserDetails(string id)
{
}

context.MapRoute(
            "Admin_Default",
            "{controller}/{action}/{id}",
            new { action = "Index", controller = "Start", id = UrlParameter.Optional }
        );

另一种观点认为我有用户的列表:在.NET理念标准的会员管理是你的用户名点击显示细节和工作的,只有当用户名是一个字。 我最近遇到一个用户名,看起来像这样:

史蒂芬CH安德森

所以我用它来产生的链接:

@Html.ActionLink(Model.UserName, "UserDetails", new { controller = "Security", id = HttpUtility.UrlEncode(Model.UserName) })

但是,当我点击它,我得到:HTTP错误404.11 - 未找到

如果我在一个普通的用户名就是一个词点击,它就像一个魅力。

我假设路径配置不理解这一要求,问题是如何得到它的工作?

更新

链接:

<a href="/Security/UserDetails/Steven%2bC.H.%2bAndersson">Steven C.H. Andersson</a>

Answer 1:

编码显然是错误的,因为它编码空格作为“%2B”,这是“+”。 你不传递查询字符串参数,但路径的一部分,所以你需要使用HttpUtility.UrlPathEncode()



Answer 2:

我有同样的问题,这里是我如何解决它,但我不知道这是最好的办法。 我很希望听到更完美的解决方案。

在视图文件:

@Html.ActionLink(Model.UserName, "UserDetails", new { controller = "Security", id = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Model.UserName)) })

在控制器文件:

id = Encoding.UTF8.GetString(Convert.FromBase64String(id))


文章来源: Passing in a querystring with a space?