我想在ASP.Net中使用jQuery Ajax,我在JavaScript中使用下面的代码
$(function () {
$('#click').click(function () {
$.ajax({
type: "POST",
url: "mine/HelloAgain",
data: JSON.stringify({ID : 236 , Name : "Milad"}),
contentType: "application/json",
dataType: "json",
success: function (msg) {
$("#Result").text(msg.d);
}
});
});
});
正如你在url中看到我使用[mine / HelloAgain]并在此代码中创建Global for routing
routes.MapPageRoute("Mine",
"mine/{*locale}",
"~/tst/Test.aspx/HelloAgain",
true
);
但返回404 Not Found错误此WebMethod我想调用
[WebMethod]
public static string HelloAgain(int ID, string Name)
{
return ID.ToString() + " Hello " + Name + DateTime.Now.ToString();
}
任何帮助将不胜感激
答案 0 :(得分:1)
您无法使用方法
routes.MapPageRoute("Mine",
"mine/{*locale}",
"~/tst/Test.aspx/HelloAgain",
true
);
仅用于将页面映射到某个路径。 我发现只有一个解决方案来映射非Page端点:创建自定义路由处理程序并调用它。 例如,Global.asax:
routes.Add("Authorization", new Route("Authorization", new GenericRouteHandler<AuthorizationHandler>()));
通用路由处理程序:
public class GenericRouteHandler<T> : IRouteHandler where T : IHttpHandler, new()
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new T();
}
}
授权处理程序:
public class AuthorizationHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var requestData = JsonHelper.DeserializeJson<Dictionary<string, string>>(context.Request.InputStream);
context.Response.ContentType = "text/json";
switch (requestData["methodName"])
{
case "Authorize":
string password = requestData["password"];
string userName = requestData["name"];
context.Response.Write(JsonHelper.SerializeJson(Authorize(userName, password)));
break;
}
}
public bool IsReusable
{
get { return true; }
}
public object Authorize(string name, string password)
{
User user = User.Get(name);
if (user == null)
return new { result = "false", responseText = "Frong user name or password!" };
else
return new { result = true};
}
此外,您可以使用Reflection来调用方法,例如:
Type thisHandlerType = GetType();
var methodToCall = thisPage.GetMethod(requestData["methodName"]);
if (methodToCall != null)
{
var response = methodToCall.Invoke(this, new object[]{requestData});
context.Response.Write(JsonHelper.SerializeJson(response));
}
public object Authorize(Dictionary<string, string> inputData)
{
User user = User.Get(inputData["name"]);
if (user == null)
return new { result = "false", responseText = "Frong user name or password!" };
else
return new { result = true};
}