簡體   English   中英

asp.net core 2帶有+的可選屬性路由參數,結果為404

[英]asp.net core 2 optional attribute routing parameter with + in it results in 404

修復更新

看來我沒有對實際的錯誤給予足夠的重視,這是一個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 ,將傳遞的name參數進行URL編碼,因此所有空格都將更改為+

UPDATE控制器的其余部分(去除了代碼)

public class HomeController : BaseController
{

    private readonly IViewRenderService _viewRenderService;

    public HomeController(CryptoDateContext context, IConfiguration configuration,
        IViewRenderService viewRenderService, IOptions<GeneralSettings> generalSettings, ILogger<BaseController> logger)
        : base(context, configuration, generalSettings, logger)
    {
        logger.LogDebug("Base controller ctor called");
        _viewRenderService = viewRenderService;

    }

    public IActionResult Sitemap()
    {


    }

    public async Task<IActionResult> SymbolSitemap()
    {

    }




    [ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
    public IActionResult GetSearchResults(SearchCriteria criteria)
    {


    }
    public IActionResult Index()
    {

    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult AddEvent(SubmitEventModel model)
    {

    }


    public IActionResult SubmitEvent(int? id)
    {

    }

    public IActionResult DownloadICS(int id)
    {



    }
    [HttpPost]
    [ServiceFilter(typeof(ValidateReCaptchaAttribute))]
    public IActionResult SubmitContactus(ContactUsModel model)
    {

    }

    public IActionResult Contribute()
    {


        return View();
    }
    public IActionResult Telegram()
    {


        return View();
    }
    [Route("home/event/{id:int}/{title?}")]
    public IActionResult Event(int id, string title = null)
    {

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

    }

    public IActionResult Contact()
    {

    }

    public IActionResult Error()
    {
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
    public IActionResult Exception()
    {
        throw new Exception("Testing");
    }
}

如果僅替換+和其他特殊字符怎么辦? 使用如下功能:

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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM