Nie znaleziono request.querystring w metodzie statycznej


Mam metodę statyczną, w której chcę pobrać wartość zapytania
querystring
. Ale podaje mi wartość
null
, kiedy dzwonię do niego z
webmethod
. Poniżej znajduje się kod
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"
}

Nazywam tę metodę sieciową z

wywołanie Ajax.

Działa dobrze podczas ładowania strony, ale nie w metodzie statycznej. Jak mogę tego użyć w metodzie statycznej. Proszę pomóż.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie masz
HttpContext.Current
w swojej metodzie statycznej, ponieważ metoda statyczna nie ma bieżącego kontekstu.
Powinna działać, gdy metoda statyczna jest wykonywana w wątku, który wysyła żądanie HTTP.
Aby obejść to ograniczenie, musisz podać
HttpContext.Current.Request.QueryString
jako parametr zdarzenia funkcji statycznej formularza
PageLoad
lub w dowolnym miejscu w cyklu życia żądania.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz przekazać ciąg zapytania wraz z wywołaniem.
można to osiągnąć za pomocą wywołania 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 () { }
});

Następnie można normalnie uzyskać dostęp do zmiennych po stronie serwera.
string value = HttpContext.Current.Request.QueryString["itemId"].ToString();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

int itemid =Convert.ToInt32(HttpContext.Current.Request.Form["itemid"]);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wystarczy przekazać ciąg zapytania jako parametr do metody usługi WebService.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

//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;
}

// Wywołaj to w swojej metodzie internetowej
NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); 
if (collection != null && collection.Count > 0)
{
string id = HttpContext.Current.Server.UrlDecode (collection["id"]);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Równina

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";
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz routera, spróbuj użyć RouteData
string userIdQuery = string.Empty; 
var userIdRouterValue = HttpContext.Current.Request.RequestContext.RouteData.Values["UserID"];
if (userIdRouterValue!=null)
{
userIdQuery = userIdRouterValue.ToString();
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Pierwszym krokiem jest utworzenie usługi internetowej i metody internetowej, która przyjmuje 2 parametry, tj.
[WebMethod]
public void helloworld(string name,string password
{
}

Następnie wystarczy utworzyć obiekt usługi internetowej i wywołać metodę helloworld, tj.
public Ripple.WebAdmin webService = new Ripple.WebAdmin();
webService.helloworld("username",password);

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się