我"玩"使用自定义入站URL路由并遇到问题。
当我将自定义路由传递给要检查的URL时,以*。+结尾,当我提交请求时,我的类不会被触发。
示例网址为"〜/ old / windows.html"
当我在调试器中逐步执行此操作时,我的RouteBase实现并未触发。如果我编辑我传递给路由的构造函数的url以尝试匹配"〜/ old / windows",我的实现将按预期触发。
再次,如果我将url ro检查到"〜/ old / windows。"问题再次发生。
我的路线实施如下: -
public class LegacyRoute : RouteBase
{
private string[] _urls;
public LegacyRoute(string[] targetUrls)
{
_urls = targetUrls;
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData result = null;
string requestedURL = httpContext.Request.AppRelativeCurrentExecutionFilePath;
if (_urls.Contains(requestedURL, StringComparer.OrdinalIgnoreCase))
{
result = new RouteData(this, new MvcRouteHandler());
result.Values.Add("controller", "Legacy");
result.Values.Add("action","GetLegacyURL");
result.Values.Add("legacyURL", requestedURL);
}
return result;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return null;
}
}
在RoutesConfig文件中,我已经注册了我的路线: -
routes.MapMvcAttributeRoutes();
routes.Add(new LegacyRoute(new[]{"~/articles/windows.html","~/old/.Net_1.0_Class_Library"}));
有人能指出为什么会出现问题吗?
答案 0 :(得分:1)
默认情况下,.html
扩展名不由.NET处理,它由IIS直接处理。您可以通过在<system.webServer>
-
<handlers>
<add name="HtmlFileHandler" path="*.html" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
指出here。以上将把每个.html
文件请求路由到.NET,如果您不希望路由处理每个.html
文件,您可能希望通过提供更完整的路径来更具体。
答案 1 :(得分:1)
我发现了问题,我相信这会帮助很多开发人员。
问题在于通过Visual Studio运行的IIS Express。
applicationhost.config中配置了一个名为: -
的模块<强> UrlRoutingModule-4.0 强>
这是它在文件中的样子: -
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
您需要将前提条件参数设置为&#34;&#34;。
要做到这一点: -
希望这可以帮助遇到类似问题的其他人。