Abbiamo un modulo HTTP che decodifica tutte le richieste codificate. È perfettamente compatibile con tutte le richieste WCF, ma NON in requests- Api Web nel Api Web la richiesta (sia POST e GET) ottiene al servizio ancora codificatoModulo Web API e HTTP
vedo che colpisce il modulo HTTP, ma, ancora una volta , arriva ancora al servizio codificato. Come posso risolvere il problema? o cosa sto sbagliando? so che è meglio lavorare con i gestori di messaggi in Web Api, ma i moduli HTTP suppongono di funzionare troppo no? Modulo
HTTP:
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
context.EndRequest += context_PreSendRequestContent;
}
void context_PreSendRequestContent(object sender, EventArgs e)
{
string encodedQuerystring = HttpContext.Current.Request.QueryString.ToString();
if (!string.IsNullOrEmpty(encodedQuerystring))
{
System.Collections.Specialized.NameValueCollection col = new System.Collections.Specialized.NameValueCollection();
col.Add("q", encodedQuerystring);
WebFunction.CreateQuerystring(HttpContext.Current, col);
}
}
void context_BeginRequest(object sender, EventArgs e)
{
string encodedQueryString = String.Empty;
if (HttpContext.Current.Request.QueryString.Count > 0 && HttpContext.Current.Request.QueryString["q"] != null)
{
object _p = HttpContext.Current.Request.QueryString;
encodedQueryString = HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.QueryString["q"].ToString());
string originalQueryString = HttpContext.Current.Server.UrlDecode(WebFunction.Base64Decode(encodedQueryString));
if (!string.IsNullOrEmpty(originalQueryString))
{
WebFunction.CreateQuerystring(HttpContext.Current, WebFunction.ConvertQueryToCollection(originalQueryString));
}
}
}
WebFunction:
public static void CreateQuerystring(HttpContext context, System.Collections.Specialized.NameValueCollection nameValueCollection)
{
// reflect to readonly property
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// make collection editable
isreadonly.SetValue(context.Request.QueryString, false, null);
context.Request.QueryString.Clear();
context.Request.QueryString.Add(nameValueCollection);
// make collection readonly again
isreadonly.SetValue(context.Request.QueryString, true, null);
}
Web Api:
public class NamesController : ApiController
{
[HttpGet]
[ActionName("GET_NAMES")]
public Drugs_ResponseData Get(string q)
{
//need to add the decode function to get it to work
string[] arrAmpersant = Commonnn.DecodeFrom64(q).Split('&');
Names_obj = new Names();
return _obj.GetResult(Convert.ToInt32(Commonnn.GetValFromEqual(arrAmpersant[0])));
}
}
dove hai registrato il modulo http? Se ti sei registrato all'interno di '', il tuo pool di applicazioni deve essere eseguito in modalità integrata. –
@KhanhTO è in e viene eseguito in modalità integrata. arriva al modulo HTTP ma viene comunque codificato nella richiesta. –
DasDas
Posso chiedere in quanti posti viene utilizzata la QuerString codificata per richiesta e quanti visitatori colpiscono la pagina all'ora? – LGSon