Routes.AppendTrailingSlash排除了一些路线

Boa*_*ler 12 c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-5.2

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

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

如何防止将Slash附加到robots.txt路由并使其在尾部斜杠中调用?

我的控制器代码:

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

我的路线配置看起来像这样:

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;
Run Code Online (Sandbox Code Playgroud)

Dav*_*ich 10

动作过滤器怎么样?我写的很快,而不是效率.我已经针对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);
        }

    }
Run Code Online (Sandbox Code Playgroud)

尝试以这种方式使用它

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

  • 好的解决方案没有想到这一点 (2认同)