c# - Routes.AppendTrailingSlash 排除部分路线

标签 c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-5.2

在 MVC 5.2.2 中,我可以将 Routes.AppendTrailingSlash 设置为 true,以便将尾部斜杠附加到 url。

但是我还有一个机器人 Controller ,它返回 robots.txt 的内容。

如何防止将斜杠附加到 robots.txt 路由并使其在没有尾随斜杠的情况下可调用?

我的 Controller 代码:

[Route("robots.txt")]
public async Task<ActionResult> Robots()
{
  string robots = getRobotsContent();
  return Content(robots, "text/plain");
}

我的路由配置如下所示:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home",
                                action = "Index",
                                id = UrlParameter.Optional }
            );

RouteTable.Routes.AppendTrailingSlash = true;

最佳答案

Action 过滤器怎么样。我写得很快,不是为了效率。我已经针对我手动放置和引导 "/" 的 URL 对其进行了测试,并且效果很好。

    public class NoSlash : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            var originalUrl = filterContext.HttpContext.Request.Url.ToString();
            var newUrl = originalUrl.TrimEnd('/');
            if (originalUrl.Length != newUrl.Length)
                filterContext.HttpContext.Response.Redirect(newUrl);
        }

    }

尝试这样使用它

   [NoSlash]
   [Route("robots.txt")]
   public async Task<ActionResult> Robots()
   {
       string robots = getRobotsContent();
       return Content(robots, "text/plain");
    }

关于c# - Routes.AppendTrailingSlash 排除部分路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874330/

相关文章:

c# - 使用 jquery DataTable 的 fnServerParams 和 aoData 向服务器发送数据在 MVC4 中不起作用

c# - 成员 [class] 不支持转换为 SQL

javascript - 将javascript变量作为字符串传递

c# - 计算查询耗时

asp.net-mvc - 为级联子列表构建一个空的 MVC DropdownListFor

javascript - MVC4 : how to set session variable to null in javascript

c# - 使用存储库模式但没有工作单元构建单页应用程序 - 在哪里保存更改?

c# - 在叠加视频(VLC Winform)上绘制透明控件(文本)

c# - LINQ GroupBy 返回列表作为结果

c# - 使用 Azure AD 的 Azure API APP 身份验证