带有+的asp.net核心2可选属性路由参数导致404

时间:2017-11-12 13:38:04

标签: c# asp.net-core asp.net-core-mvc asp.net-core-routing

FIX UPDATE

似乎我没有足够重视404.11的实际错误,这意味着它不允许allowDoubleEscaping所以我必须将web.config添加到我的项目并将其设置为以下

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
  <system.webServer>
  <security>
    <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration>

我有以下属性路径

[Route("home/coin/{symbol:alpha}/{name:alpha?}")]
public IActionResult Symbol(string symbol, string name)

如果我导航到/home/coin/mysymbol然后它就可以了,如果我有/home/coin/mysymbol/myname这也有效,但是如果我有/home/coin/mysymbol/myname+moreofname那么它会产生404 Not Found,{{传递的参数是URL编码的,因此任何空格都变为name

更新控制器的其余部分(代码被剥离)

+

1 个答案:

答案 0 :(得分:0)

如果您只是替换+和其他特殊字符怎么办?使用如下函数:

public string ClearnUrl(string title)
        {
            string cleanTitle = title.ToLower().Replace(" ", "-");
            //Removes invalid character like .,-_ etc
            cleanTitle = Regex.Replace(cleanTitle, @"[^a-zA-Z0-9\/_|+ -]", "");
            cleanTitle = cleanTitle.Replace("/", "");
            return cleanTitle;
        }