程序里面用到了ajax.net(http://server.chinabyte.com/77/2690077.shtml里面的组件),在没有使用url重写之前程序运行没有问题,使用了url重写之后页面里面调用的ajax方法都不起作用了;我是在Global.asax文件里面实现重写的:protected void Application_BeginRequest(Object sender, EventArgs e)
{
....
重写.
base.Context.RewritePath(newUrl);
}web.config文件:
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
页面里面调用的ajax方法:
<script language="javascript" src="ajax/common.ashx"></script>
<script language="javascript" src="ajax/CompanySite.Ajax_Company,CompanySite.ashx"></script>
据我估计是重写以后这个运行路径发生了变化,也不知道怎么改了.
{
....
重写.
base.Context.RewritePath(newUrl);
}web.config文件:
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
页面里面调用的ajax方法:
<script language="javascript" src="ajax/common.ashx"></script>
<script language="javascript" src="ajax/CompanySite.Ajax_Company,CompanySite.ashx"></script>
据我估计是重写以后这个运行路径发生了变化,也不知道怎么改了.
.net拥护者 我也知道是可能是这个原因,不过这个ajax目录是ajax.net临产生的一个目录(我试过了改成网站绝对路径也不行),现在我就是不知道怎么改这个路径,能不能改?有遇到到过同样问题的高手请帮下忙.
aspx页面form中action还是原来的,路径不对会报404错误;
如果修改form.action ,ajax又会报405错误,目前正在研究中...跟你一样问题
在web.config中添加配置项应该就可以了.<configSections>
<sectionGroup name="ajaxNet">
<section name="ajaxSettings" type="Ajax.AjaxSettingsSectionHandler,Ajax" />
</sectionGroup>
</configSections>
<ajaxNet>
<ajaxSettings>
<add type="Namespace.Class1,Assembly" path="mypath" />
</ajaxSettings>
</ajaxNet>
<ajaxSettings>
<urlNamespaceMappings useAssemblyQualifiedName="false" allowListOnly="false">
<add type="Namespace.Class1,Assembly" path="mypath" />
</urlNamespaceMappings>
</ajaxSettings>
</ajaxNet>
{
....
如果不是ajax/*.ashx{
重写.
}
base.Context.RewritePath(newUrl);
}
要了解我的详细信息请进入我的主页Bridal gown或Bridal shop
巴库
你的方法多没试过,明天再试下,刚参考了一篇文章,希望可行.
http://www.cnblogs.com/cdo/archive/2006/03/08/262368.html武眉博<活靶子.NET>你的方法今天我也试过了,好像只要用程序里面用RewritePath就不行了,不管你有没有判断.
<configSections>
<sectionGroup name="ajaxNet">
<section name="ajaxSettings" type="Ajax.AjaxSettingsSectionHandler,Ajax" />
</sectionGroup>
</configSections>
<ajaxNet>
<ajaxSettings>
<urlNamespaceMappings>
<!--namespace是你的实际路径,path中的是你的重写路径. -->
<add namespace="Namespace.Class1,Assembly" path="mypath"/>
</urlNamespaceMappings>
</ajaxSettings>
</ajaxNet>
</configuration>
巴库
你的方法在vs2003下面能用吗?
<add namespace="Namespace.Class1,Assembly" path="mypath"/>
<script language="javascript" src="ajax/CompanySite.Ajax_Company,CompanySite.ashx"> </script> 上面已经说了:
CompanySite.Ajax_Company:我程序的工程名是CompanySite,调用的是Ajax_Company类里面的方法;
重写路径的话是这样子:
<LookFor>http://(\w+)\.cn\.abc\.com/2/</LookFor>
<SendTo>~/2/index.html?id=$1</SendTo>具体到
<!--namespace是你的实际路径,path中的是你的重写路径. -->
<add namespace="Namespace.Class1,Assembly" path="mypath"/>
怎么表示?
namespace中的Namespace是你的命名空间,Class1是类名称,Assembly是程序集名.
path是你自己定义的,就是重写后的URL.如果是你的情况应该是这样吧 <add namespac="CompanySite.Ajax_Company,CompanySite" path="随便其它路径"/>
巴库 你的方法我试了,还是不行,上面的设置好像只是给ajax的运行环境改目录(默认的是ajax),重写以后路径还是找不到.我把Application_BeginRequest重写的方法也贴出来了,好像只要一用到RewritePath重写就会在index.html就会提示Ajax_Company未定义 protected void Application_BeginRequest(Object sender, EventArgs e)
{
string newUrl="~/Default.aspx";
//取得域名信息
string HostName = HttpContext.Current.Request.Url.Host.ToString();
//取得网址后缀
string PathAndQuery =HttpContext.Current.Request.Url.PathAndQuery.ToString();
if (PathAndQuery==string.Empty)
{
PathAndQuery="/Index.html";
} if (HostName.ToLower().IndexOf(".cn.abc.com")!=-1 && PathAndQuery.IndexOf("ajax")==-1)
{
string [] UserHost = HostName.Split (new Char [] { '.' });
CompanySite.Ajax_Company userinfo=new CompanySite.Ajax_Company();
//取得公司信息(UserHost[0]:公司名称; ds.Rows[0]["ModelID"].ToString()主页模板)
DataTable ds=userinfo.GetDomainNameInfo(UserHost[0]);
if (ds.Rows.Count>0)
{
//重新分配网页地址
if (PathAndQuery.IndexOf('?')!=-1)
{
newUrl="~/"+ ds.Rows[0]["ModelID"].ToString() + PathAndQuery +"&id="+ds.Rows[0]["id"].ToString();
}
else
{
newUrl="~/"+ ds.Rows[0]["ModelID"].ToString() + PathAndQuery +"?id="+ds.Rows[0]["id"].ToString();
}
}
else
{
//没找到id
}
}
else
{
//域名禁止访问
}
//Response.Redirect(newUrl);
base.Context.RewritePath(newUrl);
}哪位大侠再帮我看下,不要告诉我又是无解了.
//你在这里把ajax的请求的屏蔽掉了,但在else里启用了吗
if (HostName.ToLower().IndexOf(".cn.abc.com")!=-1 && PathAndQuery.IndexOf("ajax")==-1)
{
...
}
else
{
//域名禁止访问
}
巴库
很谢谢你的热心,不过你上面说的不是问题的关键,关键的是只要一用到RewritePath就会出问题(我测试过了),Application_BeginRequest方法里面只放这一句也不行:
HttpContext.Current.RewritePath("~/2/index.html");
我已经加你为好友了,方便的话可以在QQ上聊,谢谢!
刚刚参考了下urlNamespaceMappings节设置的功能,它只是把ajax服务运行时的路径映射到"/ajax/path所指向的路径"(加了一层而已),并不是你所说的"Ajax.NET本身就支持URL重写".
CSDN-Friends继续努力!