System.Web.Routing.UrlRoutingModule 未实现 IHttpHandlerFactory 或 IHttpHandler
Posted
技术标签:
【中文标题】System.Web.Routing.UrlRoutingModule 未实现 IHttpHandlerFactory 或 IHttpHandler【英文标题】:System.Web.Routing.UrlRoutingModule does not implement IHttpHandlerFactory or IHttpHandler 【发布时间】:2017-02-28 20:54:55 【问题描述】:在我们的网站中,此错误每 5 分钟出现一次。 我不知道它从哪里来的。 任何人都可以帮助我们吗? 我们需要没有此错误的 robots.txt。
我们的应用程序自动调用http://www.xyzName.com/content/images/thumbs/robots.txt 并在异常下方显示
System.Web.Routing.UrlRoutingModule 没有实现 IHttpHandlerFactory 或 IHttpHandler。
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
这是调用该方法时自动生成robots.txt文件的方法。但问题出在应用程序 robots.txt 自动调用的某个位置。
public ActionResult RobotsTextFile()
//Default Code blocked by Nilesh
if (_storeContext.CurrentStore.Url.Contains("tk"))
const string newLine = "\r\n"; //Environment.NewLine
var sb = new StringBuilder();
sb.Append("User-agent: *");
sb.Append(newLine);
sb.Append("Disallow: /");
Response.ContentType = "text/plain";
Response.Write(sb.ToString());
else
var disallowPaths = new List<string>
"/bin/",
"/content/files/",
"/content/files/exportimport/",
"/country/getstatesbycountryid",
"/install",
"/setproductreviewhelpfulness",
;
var localizableDisallowPaths = new List<string>
"/addproducttocart/catalog/",
"/addproducttocart/details/",
"/backinstocksubscriptions/manage",
"/boards/forumsubscriptions",
"/boards/forumwatch",
"/boards/postedit",
"/boards/postdelete",
"/boards/postcreate",
"/boards/topicedit",
"/boards/topicdelete",
"/boards/topiccreate",
"/boards/topicmove",
"/boards/topicwatch",
"/cart",
"/checkout",
"/checkout/billingaddress",
"/checkout/completed",
"/checkout/confirm",
"/checkout/shippingaddress",
"/checkout/shippingmethod",
"/checkout/paymentinfo",
"/checkout/paymentmethod",
"/clearcomparelist",
"/compareproducts",
"/customer/avatar",
"/customer/activation",
"/customer/addresses",
"/customer/changepassword",
"/customer/checkusernameavailability",
"/customer/downloadableproducts",
"/customer/info",
"/deletepm",
"/emailwishlist",
"/inboxupdate",
"/newsletter/subscriptionactivation",
"/onepagecheckout",
"/order/history",
"/orderdetails",
"/passwordrecovery/confirm",
"/poll/vote",
"/privatemessages",
"/returnrequest",
"/returnrequest/history",
"/rewardpoints/history",
"/sendpm",
"/sentupdate",
"/shoppingcart/productdetails_attributechange",
"/subscribenewsletter",
"/topic/authenticate",
"/viewpm",
"/uploadfileproductattribute",
"/uploadfilecheckoutattribute",
"/wishlist",
;
const string newLine = "\r\n"; //Environment.NewLine
var sb = new StringBuilder();
sb.Append("User-agent: *");
sb.Append(newLine);
//sitemaps
if (_localizationSettings.SeoFriendlyUrlsForLanguagesEnabled)
//URLs are localizable. Append SEO code
foreach (var language in _languageService.GetAllLanguages(storeId: _storeContext.CurrentStore.Id))
sb.AppendFormat("Sitemap: 01/sitemap.xml", _storeContext.CurrentStore.Url, language.UniqueSeoCode);
sb.Append(newLine);
else
//localizable paths (without SEO code)
sb.AppendFormat("Sitemap: 0sitemap.xml", _storeContext.CurrentStore.Url);
sb.Append(newLine);
//usual paths
foreach (var path in disallowPaths)
sb.AppendFormat("Disallow: 0", path);
sb.Append(newLine);
//localizable paths (without SEO code)
foreach (var path in localizableDisallowPaths)
sb.AppendFormat("Disallow: 0", path);
sb.Append(newLine);
if (_localizationSettings.SeoFriendlyUrlsForLanguagesEnabled)
//URLs are localizable. Append SEO code
foreach (var language in _languageService.GetAllLanguages(storeId: _storeContext.CurrentStore.Id))
foreach (var path in localizableDisallowPaths)
sb.AppendFormat("Disallow: 01", language.UniqueSeoCode, path);
sb.Append(newLine);
Response.ContentType = "text/plain";
Response.Write(sb.ToString());
return null;
在 RouteProvider 中,我们添加下面的行来映射路线。
routes.MapRoute("robots.txt","robots.txt",new controller = "Common", action ="RobotsTextFile" ,new[] "Nop.Web.Controllers" );
每 5 分钟播放一次。我们使用亚马逊服务器作为 CDN,从那里获取图像。
亚马逊有没有可能称这个“http://www.xyzName.com/content/images/thumbs/robots.txt”网址?
【问题讨论】:
但我们需要 robots.txt 文件 我需要把那行放在哪里......?紧跟在 对不起先生,不工作... :( 取消注释从您的 web.config 中删除(或注释掉)这一行用于生成 robot.txt
<add name="RobotsTxt" path="robots.txt" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
并取消注释以下行
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
希望这会有所帮助!
【讨论】:
【参考方案2】:在最近发布了我最近更改了程序集名称的 Web API 后,我遇到了同样的问题。我没有 robots.txt 文件,所以上述答案与我无关。无论如何,作为一个解决方案,我只是清理了服务器上的文件夹并重新发布。
【讨论】:
【参考方案3】:我在重新部署到 Server 2016 时也遇到了这个问题。最后,我实际上注释掉了 URLRoutingModule 的处理程序映射并且它起作用了。我的猜测是它与机器级别上已经设置的内容冲突。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<!--<remove name="UrlRoutingModule-4.0"/>
<add name="UrlRoutingModule-4.0" path="*" verb="*" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>-->
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
【讨论】:
以上是关于System.Web.Routing.UrlRoutingModule 未实现 IHttpHandlerFactory 或 IHttpHandler的主要内容,如果未能解决你的问题,请参考以下文章