【问题标题】:Ignoring route error忽略路径错误
【发布时间】:2015-12-29 13:00:34
【问题描述】:

在我的网站上,我有一个不再使用的旧 angular 指令,但许多搜索引擎提供商正试图点击我网站上的特定网址:

/Spn/{{adId}}

这是ActionMethod:

public ActionResult Spn(int adId)
{
    .. my code here

    return RedirectToAction("Index");
}

每次发生这种情况时,都会将错误记录到 elmah,但是在 Elmah 中看到这些错误真的很烦人,防止记录此错误的最佳方法是什么?错误发生在代码在 action 方法中被命中之前。

这是一个错误: [ArgumentException:参数字典包含方法'System.Web.Mvc.ActionResult Spn(Int32)的不可空类型'System.Int32'的参数'adId'的空条目

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    尝试让action参数为空..

        public ActionResult Spn(int? adId)
        {
            .. my code here
    
            return RedirectToAction("Index");
        }
    

    【讨论】:

    • 我不太喜欢这样做,我更愿意在错误到达操作方法之前处理它,这意味着我必须在我的操作方法中放置一个空检查。跨度>
    【解决方案2】:

    如果您的操作方法“不再使用”,它为什么存在?你应该删除它。这将使您的服务器返回 404 响应,以便搜索引擎能够将其从索引中删除。

    或者,您可以通过设置 IgnoreRoute 来阻止对 URL 的访问。

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="[Ss]pn"});
    

    如果您想将仍流向该 URL 的流量引导到其他地方,请使用 IIS rewrite module 设置 301 响应,这样流量就不会尝试转到 action 方法,因此搜索引擎会知道从他们的索引中删除 URL 并将其替换为新 URL。

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="spn2index" stopProcessing="true">
                    <match url="^Spn/?.*$" />
                    <action type="Redirect" url="Index" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多