问题描述
我写了一个asp.net中的Url重映射程序,但是不能映射到指定的页面,请大家帮我查找一下其中的错误如果输入类似http://localhost/重映射/Products/Soda时,想让它自动映射到http://localhost/重映射/Products/Default.aspx上,其中Soda是可动态改变的最后我把错误定位在这三个文件中,一个是配置文件UrlMappings.config,其内容如下:<?xmlversion="1.0"?><urlMappings><addurl="/Products/.*"mappedUrl="~/Products/Default.aspx"/></urlMappings>一个是web.config文件,内容如下:<?xmlversion="1.0"encoding="utf-8"?><configuration><appSettings/><connectionStrings><addname="Products"connectionString="DataSource=.SQLExpress;IntegratedSecurity=True;AttachDbFileName=|DataDirectory|ProductsDB.mdf;UserInstance=True"/></connectionStrings><system.web><httpModules><addname="UrlRemapper"type="AspNetHM.UrlRemapper"/></httpModules></system.web></configuration>另一个是定义的一个HttpModule模块类,其内容如下:namespaceAspNetHM{publicclassUrlRemapper:IHttpModule{publicUrlRemapper(){////TODO:在此处添加构造函数逻辑//}publicvoidInit(HttpApplicationapp){app.BeginRequest+=newEventHandler(app_BeginRequest);}publicvoidapp_BeginRequest(Objects,EventArgse){HttpApplicationapp=(HttpApplication)s;HttpContextcontext=app.Context;stringcurrentUrl=context.Request.AppRelativeCurrentExecutionFilePath;XmlDocumenturlMappings=GetUrlMappings(context);XmlNodeListnodes=urlMappings.SelectNodes("//add");foreach(XmlNodenodeinnodes){stringurl=node.Attributes["url"].Value;stringmappedUrl=node.Attributes["mappedUrl"].Value;if(Regex.Match(currentUrl,url,RegexOptions.IgnoreCase).Success){context.RewritePath(mappedUrl);}}}privateXmlDocumentGetUrlMappings(HttpContextcontext){XmlDocumenturlMappings=(XmlDocument)context.Cache["UrlMappings"];if(urlMappings==null){urlMappings=newXmlDocument();stringpath=context.Server.MapPath("~/UrlMappings.config");urlMappings.Load(path);CacheDependencyfileDepend=newCacheDependency(path);context.Cache.Insert("UrlMappings",urlMappings,fileDepend);}returnurlMappings;}#regionIHttpModule成员publicvoidDispose(){}#endregion}}结果是如果我输入类似http://localhost/重映射/Products/Soda.aspx时,它可以映射到http://localhost/重映射/Products/Default.aspx上,但是如果输入类似http://localhost/重映射/Products/Soda时,想让它自动映射到http://localhost/重映射/Products/Default.aspx上就不行了,显示无法找到页面,其中的Soda是可以动态改变的.请各位高手帮帮忙啊
解决方案
解决方案二:
以前遇到过类似的问题但是记不清楚了介意你的Soda加上后缀据说会被IIS转意为目录就找不到了
解决方案三:
必须要有扩展名否则请在虚拟目录下新建Soda文件夹,并写入一个空白的Default.aspx文件URL重写的前提是asp.net处理程序可以接受到来自IIS等服务器的解析请求而类似http://localhost/重映射/Products/Soda这样的地址IIS会自己在Sode目录下寻找默认文档如果找不到,直接返回404错误更本就不会再将aspx文件转交给asp.net去解析处理当然,你可以捕获http404错误,交由某一个aspx页面处理在从那个处理页面重写url到一个合法的地址