网上找了好长时间关于隐藏 .asmx页面直接访问的方法,综合了网友们的回复后,终于解决,下面分享给大伙;
第一步:在Global.asax中,将真实的.asmx页面隐藏起来,如下:
在ajax调用时,可以使用 /commweb/EventName 进行进行正常调用,通过URL转换,将 commweb 转换为 comm.asmx(你真正的服务页面)
//解析指定服务页面
protected void Application_BeginRequest(object sender, EventArgs e)
{
string hPath = Request.Url.LocalPath.ToString().ToLower();
if (!hPath.Contains("/comm.asmx"))
{
if (hPath.Contains("/commweb"))
{
Context.RewritePath(hPath.Replace("/commweb", "/comm.asmx"));
}
}
}
第二步:配置web.config,将 asmx 页面指向 AsmxErrorPage.aspx 页面,
配置 <wsdlHelpGenerator href ="AsmxErrorPage.aspx" />,代码如下:
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<!--支持Start Web Service-->
<webServices>
<protocols>
<add name="HttpSoap" />
<add name="HttpPost" />
<add name="HttpGet" />
<add name="Documentation" />
</protocols>
<!--定义ASP.NET中web service (asmx)默认页面的样式-->
<wsdlHelpGenerator href ="AsmxErrorPage.aspx" />
</webServices>
<!--支持End Web Service-->
</system.web>
这样,用户如果通过 http://服务器地址/comm.asmx 访问你的页面,只会访问到 AsmxErrorPage.aspx 页面。
asmx 页面的服务列表得到全面隐藏。