在MVC 5.2.2中,我可以将Routes.AppendTrailingSlash设置为true,以便在URL后面添加斜杠。

但是,我还有一个机器人 Controller ,该 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进行了测试,并且像一个 super 按钮一样工作。

    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/

10-09 03:06