您的位置:首页 - 教程 - HoverTreeTop - 正文
asp.net webmethod去掉后缀aspx和asmx
现在有一个发布好的WebService,地址是http://hovertree.com:2706/UploadExpenseToConstract.asmx
能不能把最后面的asmx去掉呢?变成
http://hovertree.com:2706/UploadExpenseToConstract
但效果和原来的是一样的?


因为调用地址已经确定:http:///*/Service?WDSL
,不能有asmx后缀。

去掉asmx后缀的方法:

创建全局应用程序类Global.asax,并添加如下代码:
void Application_BeginRequest(object sender, EventArgs e)
{
String path = Request.Url.ToString();
path = Request.Url.LocalPath.ToString();
if (!path.Contains("/Service.asmx"))
{
if (path.Contains("/Service"))
{
Context.RewritePath(path.Replace("/Service", "/Service.asmx"));
}
}
}
这样就可以通过http:///WebServices/Service?WDSL来引用WebService了。
字符串如何替换请根据实际情况更改。

具体代码:
Global.asax
using System;

namespace ExampleHoverTree
{
public class Global : System.Web.HttpApplication
{

protected void Application_Start(object sender, EventArgs e)
{

}

protected void Session_Start(object sender, EventArgs e)
{

}

protected void Application_BeginRequest(object sender, EventArgs e)
{
string hPath= Request.Url.LocalPath.ToString().ToLower();
if (!hPath.Contains("/hovertreewm.asmx"))
{
if (hPath.Contains("/hovertreewm"))
{
Context.RewritePath(hPath.Replace("/hovertreewm", "/hovertreewm.asmx"));
}
}
}

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{

}

protected void Application_Error(object sender, EventArgs e)
{

}

protected void Session_End(object sender, EventArgs e)
{

}

protected void Application_End(object sender, EventArgs e)
{

}
}
}

HoverTreeWM.asmx
using System.Web.Services;

namespace ExampleHoverTree.HtExample.HWebMethod
{
/// <summary>
/// HoverTreeWM 的摘要说明
/// </summary>
[WebService(Namespace = "http://hovertree.top/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 by 何问起
[System.Web.Script.Services.ScriptService]
public class HoverTreeWM : System.Web.Services.WebService
{

[WebMethod]
public string HLogin(string hUsername,string hPassword)
{
// return hUsername + hPassword;
return (hUsername.ToLower() == "hewenqi" && hPassword == "HoverTree") ? "登录成功" : "用户名或密码错误";
}
}
}

HoverTreeAjax.htm
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>asp.net WebService去掉asmx后缀示例_何问起</title>
<script src="http://down.hovertree.com/jquery/jquery-1.12.4.min.js"></script>
<style type="text/css">
.hovertreelogin {
height: 400px;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
</style>
</head>
<body>
<div class="hovertreelogin">
<table>
<tr><td>用户名:</td><td><input type="text" id="husername" /></td><td></td></tr>
<tr><td>密 码:</td><td><input type="password" id="hpassword" /></td><td></td></tr>
<tr><td></td><td><input type="button" value="登录" id="hlogin" /></td><td></td></tr>
<tr><td></td><td><br />正确用户名为:hewenqi<br />密码为HoverTree</td><td></td></tr>
</table>
</div>
<script>
$(function(){
$(function () {
$("#hlogin").on("click", function () {
$.ajax({
type: 'Post',
url: '/HtExample/HWebMethod/hovertreeWM/HLogin',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{'hUsername':'" + $("#husername").val() + "','hPassword':'" + $("#hpassword").val() + "'}",
success: function (data, textStatus) {
alert(data.d);
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
alert("err " + errorThrown);
}
});
})
})
})
</script>
</body>
</html>

效果图:

源码下载:http://hovertree.com/h/bjaf/hv6cqe5n.htm

评论: