Я работаю над старым проектом.Где какой-то клиент может увидеть псевдоним продукта.Другие увидят фактическое название продукта.Когда клиент запрашивает информацию о продукте, он отправляет имя продукта в QueryString.Я должен проверить, является ли это фактическим названием продукта или нет в методе public override void OnActionExecuting
.
Если это не фактическое название продукта, мне придется создать новый запрос, используя фактическое название продукта, поскольку я не могуизменить queryString запроса.Контроллер принимает значение «Имя продукта» как HttpContext.Current.Request.QueryString["Product"] ?? string.Empty;
Как я могу создать новый запрос, используя обновленную строку запроса из OnActionExecuting?
public override void OnActionExecuting(HttpActionContext actionContext)
{
var token = actionContext.Request.RequestUri.ParseQueryString();
var flag = false;
if (token != null)
{
var key = token.AllKeys.Where(x => x.ToLower().Equals("productname"))?.FirstOrDefault();
if(aliasedProduct(token[key]))
{
token[key] = RevertAlias(token[key]);
flag = true;
ConstructQueryString(token);
}
}
if(flag)
{
//Here Have to create new Call as QueryString Can not be changed.
}
}
public string ConstructQueryString(NameValueCollection parameters)
{
List<string> items = new List<string>();
foreach (string key in parameters)
items.Add (key.ToString() + "=" + parameters[key].ToString());
return string.Join("&", items.ToArray());
}
Вот мой метод контроллера:
[Route("ProductDetail")]
public HttpResponseMessage getProductDetail()
{
HttpResponseMessage response;
try
{
string product= HttpContext.Current.Request.QueryString["Product"] ?? string.Empty;
//Here are others variable and logic
var productDetails = productManagement.GetProductDetail(this.GetCurrentContextUser(), product);
response = Request.CreateResponse(HttpStatusCode.OK, productDetails);
return response;
}
catch (InputValidationException ex)
{
Helper.AddModelErrors(ModelState, ex);
response = Request.CreateErrorResponse(HttpStatusCode.NotFound, ModelState);
}
catch (System.Exception ex)
{
response = Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
}
return response;
}
Я не смог изменить структуру метода контроллера.Если я изменю это, многие другие продукты на стороне клиента должны быть обновлены.Есть ли способ сделать это в OnActionExecuting