Если я правильно понимаю ваш вопрос, то вам нужен DelegatingHandler.Это может выглядеть следующим образом:
public class RequestHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Console.WriteLine(request.RequestUri);
request.RequestUri = new Uri(toEnglishNumber(request.RequestUri.ToString()));
Console.WriteLine(request.RequestUri);
return base.SendAsync(request, cancellationToken);
}
public static string toEnglishNumber(string input)
{
string[] persian = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
for (int j = 0; j < persian.Length; j++)
input = input.Replace(persian[j], j.ToString());
return input;
}
}
Каждый запрос выполняется в первую очередь в обработчике, где вы можете сделать свой персонал.Вам нужно зарегистрировать это глобально:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new RequestHandler());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
И для простого теста контроллера:
public class TestController : ApiController
{
public IHttpActionResult Get(int number)
{
return this.Ok($"Hello World {number}.");
}
}
И это можно сделать так:
Дополнительную информацию см. В постере веб-API: https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
Удачного кодирования!