ASP.NET路由:令牌之间的字面子细分,以及带有字符子段角色的路由值
-
29-09-2019 - |
题
我要问的原因是因为IIS保护某些ASP.NET文件夹,例如bin,app_data,app_code等提到的名称。
这意味着我不能有这样的路线:
{controller}/{action}/{id}
... id可以是任何字符串,例如
Catalog/Product/Bin
因此,我愿意在ID之前使用后缀来更改路线,而不是禁用此安全措施,例如:
{controller}/{action}_{id} // e.g. Catalog/Product_Bin
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin
但是,如果ID包含新的分配器,这些路线将无法工作,_在这种情况下,例如
// These URL won't work (I get 404 response)
Catalog/Product_Bin_
Catalog/Product/_Bin_
Catalog/Product/__Bin
为什么?我不知道,对我来说看起来像个错误。我该如何使这些路线工作,ID可以是任何字符串?
解决方案
好的,我有一个确定的答案。是的,这是一个错误。但是,在这一点上,我很遗憾地说,我们没有计划以几个原因进行修复:
- 这是一个打破的变化,可能很难注意到这一点。
- 有一个简单的解决方法。
您可以做的是将URL更改为没有强调:
{controller}/{action}/_{id}
然后添加一个路由约束,该约束要求ID参数以下划线字符开始。
然后,在您的操作方法中,您可以从ID参数中剪掉下划线前缀。如果您喜欢,您甚至可以编写一个动作过滤器为您执行此操作。带来不便敬请谅解。
其他提示
您可以使用目录或文件名不允许的字符,例如: *,?,:”,<,>,|。
使用ASP.NET MVC,如果您查看源,它们具有路径分离器(/)的硬编码值,而据我的知识无法更改。
不隶属于 StackOverflow