我正在尝试创建一个 API 代理程序,以便前端可以使用给定的任何端点调用 api,在代理中我决定要执行的 URL。我有以下问题:
在我的前端,我使用以下 URL 调用我的 API 代理:
http://localhost:54857/getClients
当我的 API Broker 收到此请求时,它会立即返回一个错误,在此错误发生之前,我想将其重定向到与名称getClients不匹配的控制器操作。
请求调用我的 API Broker的前端代码:
[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 Broker 中的路由:
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);
}
在当前情况下(上面的代码),我收到一个错误,我的 API 代理中的代码甚至没有被执行。我想要实现的是,将 API Broker 中收到的任何给定请求重定向到执行RedirectApi()方法的 API Broker Controller 。
希望有人能帮忙!
提前致谢!
您可以在其他映射代码之后添加此代码:
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Redirect", action = "RedirectApi" }
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句