在 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/