Urlhelper.action编码一些特殊字符

时间:2017-07-25 09:55:44

标签: c# url asp.net-core urlencode asp.net-core-webapi

我有一个ASP.Net Core web api。 我使用IUrlHelper.Action生成一个完全限定的URL。 当我通过

Østjylland - 复制%*

它逃脱了Ø和空格而不是*

%C3%98stjylland%20-%20copy *

根据文件

https://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action(v=vs.118).aspx?f=255&mspperror=-2147217396#Anchor_15

不应转义任何字符。为什么会这样?我是否真的必须使用WebUtility首先解码来自UrlHelper的url,然后使用WebUtility再次对其进行编码以逃避所有特殊字符?

1 个答案:

答案 0 :(得分:0)

来自here的类似答案对我有用。

public static MvcHtmlString ActionNoEscape(this HtmlHelper html, string actionName, string controllerName, object values)
{
    RouteValueDictionary routeValues = new RouteValueDictionary(values);
    UrlHelper urlHelper = new UrlHelper(html.ViewContext.RequestContext, RouteTable.Routes);
    string url = urlHelper.Action(actionName, controllerName);
    url += "?";
    List<string> paramList = new List<string>();
    foreach (KeyValuePair<string, object> pair in routeValues)
    {
        object value = pair.Value ?? "";
        paramList.Add(string.Concat(pair.Key, "=", Convert.ToString(value, CultureInfo.InvariantCulture)));
    }
    url += string.Join("&", paramList.ToArray());
    return new MvcHtmlString(url);
}

当然,我在.NET Framework中工作,但.NET Core的概念应该是相同的。希望这有帮助!