【问题标题】:Passing a parameter with an ampersand to a controller action method将带有 & 符号的参数传递给控制器​​操作方法
【发布时间】:2013-01-26 01:07:34
【问题描述】:

我有一个显示供应商链接的视图,其中包含指向每个供应商详细信息页面的链接

@foreach (var vendor in Model.Vendors)
{
    <li>
        <a href="/Vendors/@(vendor.Name)">@vendor.Name</a>
    </li>
}

一个特定的供应商被命名为“ABC 销售和服务”,因此到他们的详细信息页面的链接是 /Vendors/ABC Sales &amp; Services。当我导航到该网址时,我收到此错误:

从客户端 (&) 检测到具有潜在危险的 Request.Path 值。

有没有办法解决这个问题?

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor


    【解决方案1】:

    将此添加到web.confighttpRuntime

    <httpRuntime requestPathInvalidChars="&lt;,&gt;,*,%,:,\,?" />
    

    默认情况下,该列表包括&amp;amp;,您只需将其删除

    【讨论】:

    • 另外,正如@CalvinAllen 在他的回答中所说,使用 URL 的名称通常不是一个好习惯(除非你有正当理由)
    【解决方案2】:

    您应该真正使用供应商的 ID(希望在您的数据库中有一个主键 - 数字/guid),而不是名称。

    【讨论】:

      【解决方案3】:

      您应该对供应商名称进行 UrlEncode:

      <a href="/Vendors/@Url.Encode(vendor.Name)">@vendor.Name</a>
      

      顺便说一句,当您使用 Url.ActionHtml.Action 方法构建锚标记时,这是代表您完成的

      【讨论】:

        【解决方案4】:

        你可以使用

        <a href="@Url.Action("/Vendors/" + @vendor.Name)">@vendor.Name</a>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-17
          • 1970-01-01
          • 2019-11-15
          • 2011-07-25
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          相关资源
          最近更新 更多