ASP.NET 路由 : Literal sub-segment between tokens, 并使用文字子段中的字符路由值

标签 asp.net iis routing asp.net-routing

我问的原因是因为 IIS 保护某些 ASP.NET 文件夹,如 Bin、App_Data、App_Code 等。即使 URL 没有映射到实际的文件系统文件夹,IIS 也会拒绝路径段等于其中之一的 URL提到的名字。

这意味着我不能有这样的路线:

{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 参数中删除下划线前缀。如果您愿意,您甚至可以编写一个 Action 过滤器来为您执行此操作。带来不便敬请谅解。

    关于ASP.NET 路由 : Literal sub-segment between tokens, 并使用文字子段中的字符路由值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318373/

    相关文章:

    c# - System.StackOverflowException ,何时使用 get set 属性?

    asp.net - 缓存大量数据

    .net - Windows 更新后 WCF 服务中的 ServiceActivationException : Could not load file or assembly 'App_global. asax.vtxl8efb,版本 = 0.0.0.0

    caching - Symfony2 动态路由 - 缓存问题

    ASP.NET 路由 : RouteCollection class missing

    c# - RoutePrefix 不工作 Asp.NET MVC

    c# - 在特定位置禁用 HttpModule

    asp.net - 在我的 Web 应用程序项目上的 MSBuild 期间无法连接到 CopyAllFilesToSingleFolderForMsdeployDeployDependsOn

    iis - 从 Azure 中的 Web Api 中删除缓存 HTTP 响应 header

    azure - 通用化 Azure Windows VM 后 SSL 不起作用