Я пытаюсь создать программу-брокер API, чтобы веб-интерфейс мог вызывать API с любой заданной конечной точкой, в брокере я решаю, какой URL будет выполняться.У меня следующая проблема:
В своем интерфейсе я звоню своему брокеру API со следующим URL:
http://localhost:54857/getClients
Когда мой брокер APIПолучив этот запрос, он мгновенно возвращает ошибку, прежде чем эта ошибка возникнет, я хочу перенаправить ее на действие контроллера, которое не соответствует имени getClients .
Front-end код, который запрашивает вызов у моего API-брокера:
[HttpGet]
public async Task<ActionResult> getCall()
{
string url = "http://localhost:54857/";
string operation = "getClients";
using (var client = new HttpClient())
{
//get logged in userID
HttpContext context = System.Web.HttpContext.Current;
string sessionID = context.Session["userID"].ToString();
//Create request and add headers
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Custom header
client.DefaultRequestHeaders.Add("loggedInUser", sessionID);
//Response
HttpResponseMessage response = await client.GetAsync(operation);
if (response.IsSuccessStatusCode)
{
string jsondata = await response.Content.ReadAsStringAsync();
return Content(jsondata, "application/json");
}
return Json(1, JsonRequestBehavior.AllowGet);
}
}
Моя маршрутизация в моем API-брокере:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller=Redirect}/{action=RedirectApi}/{id}");
}
Контроллер API-брокера:
[System.Web.Http.AcceptVerbs("GET")]
[System.Web.Http.HttpGet]
public Customer RedirectApi()
{
Customer t = dbProducts.Customers
.Where(h => h.customerID == 1)
.FirstOrDefault();
return t;
}
У меня также есть фильтр, который работает, когда присутствует метод API getClients :
public override void OnActionExecuting(HttpActionContext actionContext)
{
//Checks if header is method Get and has attribute
if ((actionContext.Request.Method.Method == "GET") && (actionContext.Request.Headers.GetValues("loggedinUser").First() != null))
{
}
base.OnActionExecuting(actionContext);
}
В текущей ситуации (код выше) IЯ получаю сообщение об ошибке, и код моего брокера API даже не выполняется.Я пытаюсь добиться того, чтобы я перенаправлял любой заданный запрос, полученный в API Broker, на мой контроллер API Broker, который выполнял метод RedirectApi () .
Надеюсь, что кто-нибудь может помочь!
Заранее спасибо!