Как подключиться к контроллеру, когда контроллер не распознается на первом месте в asp.net mvc? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать программу-брокер 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 () .

Надеюсь, что кто-нибудь может помочь!

Заранее спасибо!

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете добавить этот код после другого кода сопоставления:

routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Redirect", action = "RedirectApi" }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...