asp.net-mvc – asp.net mvc排除来自搜索引擎抓取的动作
发布时间:2020-12-15 19:01:15 所属栏目:asp.Net 来源:网络整理
导读:有没有办法从搜索引擎抓取中排除控制器操作?是否有MVC动词(属性),可以添加到动作名称上方? 我想从搜索引擎抓取中排除以下网址 Home/Secret?type=1 但我希望这可用于搜索引擎抓取 Home/Search 解决方法 我认为您需要动态生成robots.txt文件. 您应该创建一个
有没有办法从搜索引擎抓取中排除控制器操作?是否有MVC动词(属性),可以添加到动作名称上方?
我想从搜索引擎抓取中排除以下网址 Home/Secret?type=1 但我希望这可用于搜索引擎抓取 Home/Search 解决方法
我认为您需要动态生成robots.txt文件.
您应该创建一个RobotController来提供robots.txt文件. Check Reference Here 与上述链接相关的是关于允许.txt扩展由操作提供的问题:https://stackoverflow.com/a/14084127/511438 public ActionResult Robots() { Response.ContentType = "text/plain"; //-- Here you should write a response with the list of //areas/controllers/action for search engines not to follow. return View(); } 添加Robots.cshtml 映射路由,以便对文件的调用将调用上面的操作. routes.MapRoute("Robots.txt","robots.txt",new { controller = "Home",action = "Robots" }); 以下是NoRobots属性,其中包含用于获取具有该属性的区域/控制器/操作列表的代码.很抱歉解释完整的命名空间文本.希望有人能够看到反思,更好地解决问题. public sealed class NoRobotsAttribute : System.Attribute { public static IEnumerable<MethodInfo> GetActions() { return Assembly.GetExecutingAssembly().GetTypes() .Where(t => (typeof(Controller).IsAssignableFrom(t))) .SelectMany( type => type.GetMethods(BindingFlags.Public | BindingFlags.Instance) .Where(a => a.ReturnType == typeof(ActionResult)) ); } public static IEnumerable<Type> GetControllers() { return Assembly.GetExecutingAssembly().GetTypes() .Where(t => (typeof(Controller).IsAssignableFrom(t))); } public static List<string> GetNoRobots() { var robotList = new List<string>(); foreach (var methodInfo in GetControllers().Where(w => w.DeclaringType != null)) { var robotAttributes = methodInfo .GetCustomAttributes(typeof(NoRobotsAttribute),false) .Cast<NoRobotsAttribute>(); foreach (var robotAttribute in robotAttributes) { //-- run through any custom attributes on the norobots attribute. None currently specified. } List<string> namespaceSplit = methodInfo.DeclaringType.FullName.Split('.').ToList(); var controllersIndex = namespaceSplit.IndexOf("Controllers"); var controller = (controllersIndex > -1 ? "/" + namespaceSplit[controllersIndex + 1] : ""); robotList.Add(controller); } foreach (var methodInfo in GetActions()) { var robotAttributes = methodInfo .GetCustomAttributes(typeof(NoRobotsAttribute),false) .Cast<NoRobotsAttribute>(); foreach (var robotAttribute in robotAttributes) { //-- run through any custom attributes on the norobots attribute. None currently specified. } List<string> namespaceSplit = methodInfo.DeclaringType.FullName.Split('.').ToList(); var areaIndex = namespaceSplit.IndexOf("Areas"); var area = (areaIndex > -1 ? "/" + namespaceSplit[areaIndex + 1] : ""); var controllersIndex = namespaceSplit.IndexOf("Controllers"); var controller = (controllersIndex > -1 ? "/" + namespaceSplit[controllersIndex + 1] : ""); var action = "/" + methodInfo.Name; robotList.Add(area + controller + action); } return robotList; } } 用法: [NoRobots] //Can be applied at controller or action method level. public class HomeController : Controller { [NoRobots] public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; List<string> x = NoRobotsAttribute.GetNoRobots(); //-- Just some test code that wrote the result to a webpage. return View(x); } } ……以及区域. namespace MVC.Temp.Areas.MyArea.Controllers { using MVC.Temp.Models.Home; [NoRobots] public class SubController : Controller { [NoRobots] public ActionResult SomeAction() { return View(); } } } 所以请记住,解决方案依赖于命名空间,并欢迎任何人提供的改进. 最后,您需要正确编写机器人文件,包括任何标头信息和通配符支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何修复“’ddlAssignedTo’有一个无效的Selec
- asp.net-web-api – Ajax Post:405方法不允许
- asp.net – 跟踪SignalR连接ID以查看它们是否真的存在
- asp.net-mvc – 在MVC2中使用区域
- asp.net-mvc – 什么是防伪令牌盐的使用?
- asp.net-mvc – 快速ASP.NET路由问题
- asp.net – 什么是LiteralControl?为什么使用
- asp.net – COM异常 – TYPE_E_CANTLOADLIBRARY?
- asp.net – 跟踪广告链接点击但保持SEO友好链接?
- asp.net – 使用Visual Studio中的查询字符串参数进行调试
推荐文章
站长推荐
- .net – 类库项目中特定于语言的资源文件的问题
- asp.net-mvc – KendoUI网格显示总记录数
- asp.net-mvc – 如何从模型状态获取错误消息
- asp.net中利用Jquery+Ajax+Json实现无刷新分页的
- asp.net-mvc-3 – 绑定到视图模型的MVC3 Razor –
- asp.net-mvc-3 – 此版本的SQL Server不支持没有
- ASP.net webforms中的异步页面处理示例(.NET 2.0
- 手动把asp.net的类生成dll文件的方法
- asp.net – User.Identity.GetUserId()方法无法在
- asp.net – 无法加载mysql.web程序集
热点阅读