我有静态方法,我想在其中提取请求的querystring
值。但是当我从null
调用它时,它会给我webmethod
值。下面是一些代码
public static int GetLatestAssetId()
{
int itemid=0;
if (HttpContext.Current.Request.QueryString["itemId"] != null)
itemid = Convert.ToInt32(HttpContext.Current.Request.QueryString["itemId"]);
return itemid;
}
[WebMethod]
public static string GetContactData()
{
GetLatestAssetId();
return "Success"
}
我从 ajax调用调用这个web方法。它在页面加载中工作正常,但在静态方法中没有。我如何在静态方法中使用它。请协助。
答案 0 :(得分:6)
静态方法中没有HttpContext.Current
,因为静态方法没有当前上下文。
当在执行Http请求的线程上执行静态方法时,它应该可以工作。
要解决此限制,您应该将HttpContext.Current.Request.QueryString
作为参数提供给静态函数形式PageLoad
事件或您在请求生命周期中的任何位置。
答案 1 :(得分:4)
您必须将查询字符串与调用一起传递。 这可以通过你的ajax调用来实现。
var qString = "?" + window.location.href.split("?")[1];
$.ajax({
url: "<aspx pagename>/<ajax method>" + qString,
data: {},
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST",
success: function(){},
error: function () { },
completed: function () { }
});
然后可以正常访问服务器端变量。
string value = HttpContext.Current.Request.QueryString["itemId"].ToString();
答案 2 :(得分:3)
int itemid =Convert.ToInt32(HttpContext.Current.Request.Form["itemid"]);
答案 3 :(得分:2)
您只需将查询字符串作为参数传递给WebService的方法。
答案 4 :(得分:0)
//Get Querystring name value collection
public static NameValueCollection GetQueryStringCollection(string url)
{
string keyValue = string.Empty;
NameValueCollection collection = new NameValueCollection();
string[] querystrings = url.Split('&');
if (querystrings != null && querystrings.Count() > 0)
{
for (int i = 0; i < querystrings.Count(); i++)
{
string[] pair = querystrings[i].Split('=');
collection.Add(pair[0].Trim('?'), pair[1]);
}
}
return collection;
}
//在Webmethod中调用它
NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query);
if (collection != null && collection.Count > 0)
{
string id = HttpContext.Current.Server.UrlDecode (collection["id"]);
}
答案 5 :(得分:0)
<强>简单强>
public static int GetQueryStringData()
{
if (HttpContext.Current.Request.QueryString["UserId"] != null)
{
return Convert.ToInt32(HttpContext.Current.Request.QueryString["UserId"]);
}
else
{
return 0;
}
}
[WebMethod]
public static string GetData()
{
int x = GetQueryStringData();
if (x != 0)
return "Success";
else
return "not success";
}
答案 6 :(得分:0)
如果使用路由器,请尝试使用RouteData
string userIdQuery = string.Empty;
var userIdRouterValue = HttpContext.Current.Request.RequestContext.RouteData.Values["UserID"];
if (userIdRouterValue!=null)
{
userIdQuery = userIdRouterValue.ToString();
}
答案 7 :(得分:-1)
第一步是你需要创建一个接受2个参数的webservice和web方法,即
[WebMethod]
public void helloworld(string name,string password
{
}
之后,您只需创建一个Web服务对象并调用helloworld方法,即
public Ripple.WebAdmin webService = new Ripple.WebAdmin();
webService.helloworld("username",password);