Mamy moduł HTTP, który dekoduje wszystkie zakodowane żądania. Działa świetnie z wszystkich żądań WCF, ale NIE w Web API requests- w Web API żądanie (zarówno POST i GET) dostaje się do służby nadal zakodowanyWeb API i moduł HTTP
widzę, że Odsłon modułu HTTP, ale znowu , nadal dostaje się do usługi zakodowanej. Jak mogę to naprawić? albo co robię źle? Wiem, że lepiej współpracować z Message Handlerami w Web Api, ale moduły HTTP również działają - nie? Moduł
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])));
}
}
gdzie zarejestrowałeś swój moduł http? Jeśli zarejestrowałeś się w '', twoja pula aplikacji musi działać w trybie zintegrowanym. –
@KhanhTO jest w i działa w trybie zintegrowanym. trafia do modułu HTTP, ale nadal jest kodowany do żądania. –
DasDas
Czy mogę zapytać, w ilu miejscach jest używany zakodowany kwerenda na żądanie i ilu użytkowników trafia na stronę na godzinę? – LGSon