[英]Attribute Routing Values into Model/FromBody Parameter in ASP.NET CORE
[英]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.