【发布时间】:2019-09-18 02:37:42
【问题描述】:
我正在尝试创建一个 API 代理程序,以便前端可以使用给定的任何端点调用 api,在代理中我决定要执行哪个 URL。我有以下问题:
在我的前端,我使用以下 url 调用我的 API 代理:
http://localhost:54857/getClients
当我的 API 代理收到此请求时,它会立即返回一个错误,在此错误发生之前,我想将其重定向到与名称不匹配的控制器操作 getClients。
前端代码请求调用我的 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);
}
在当前情况下(上面的代码)我收到一个错误,我的 API 代理中的代码甚至没有被执行。我想要实现的是,我将我的 API 代理中收到的任何给定请求重定向到我的 API 代理控制器,该控制器执行 RedirectApi() 方法。
希望有人能帮忙!
提前致谢!
【问题讨论】:
-
你的错误是什么?
-
如果您的路由不成功,则不会调用过滤器。中间件可以完成这项工作,但它必须位于中间件通道的最开始。
-
我没有收到错误,它只是不执行 API Broker 控制器,因此我试图接收的数据是未定义的。
-
所以你得到一个 404 状态码,对吧?
标签: c# asp.net-mvc rest api routes