как указать маршрут веб-API - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь вызвать метод действия API, используя HttpClient.Это мой контроллер API:

[RoutePrefix("api/v1/OrganizationUnit")]
    public class OrganizationUnitController : ApiController
    {
        public IOrganizationUnitRepository OrganizationUnitRepository;

        [Route("{id}")]
        [ResponseType(typeof(OrganizationUnit))]
        [HttpGet]
        public IHttpActionResult Get(string id)
        {
            return Ok(OrganizationUnitRepository.Get(id));
        }

        [ResponseType(typeof(OrganizationUnit))]
        [HttpGet]
        [Route("")]
        public IHttpActionResult GetAll()
        {
            return Ok(OrganizationUnitRepository.GetAll());
        }

        [ResponseType(typeof(OrganizationUnit))]
        [HttpGet]
        [Route("GetAllOU")]
        public IHttpActionResult GetAllOrganizationUnits()
        {
            return Ok(OrganizationUnitRepository.GetAllOrganizationUnits());
        }
}

Ниже приведена конфигурация Route:

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
           name: "DefaultApi",
  routeTemplate: "api/v1/{controller}/{id}",
       defaults: new { id = RouteParameter.Optional }
                );

И в контроллере MVc я вызываю этот API, например:

using (var client = new HttpClient())
            {
                var organizationUnitUrl = Url.RouteUrl("DefaultApi", new { httpRoute = "", controller = "OrganizationUnit" }, Request.Url.Scheme);
                string requestUrl = organizationUnitUrl.ToString() + "/GetAllOU";
                var responseTask = client.GetAsync(requestUrl);
                responseTask.Wait();
                var result = responseTask.Result;

            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync<IEnumerable<OUWrapper>>();
                readTask.Wait();
                organizationUnitList = readTask.Result.ToList();
            }
        }

Я хочу вызвать действие GetAllOrganizationUnits, для которого Route указано как «GetAllOU». Как вы можете видеть, я добавляю «GetAllOU» к URL при вызове API с помощью HttpClient.Я думаю, что должен быть хороший способ, которым я могу назвать этот API, не добавляя что-либо к URL.Есть ли способ, где я могу указать маршрут "GetAllOU" и вызвать действие?

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

май в этом вам поможет простой и удобный способ обслуживания клиентов.

    private HttpClient _simpleserviceClient;

    private const string _getUri = "/ROUTE_TO_ACTION/{0}";
    private const string _postUri = "/ROUTE_TO_ACTION";

    public ReturnModel Postdata(SomeModel model)
    {
        var uri = string.Format(_postUri );
        var response = ServiceClient().PostAsJsonAsync(uri, model).Result;
        var result = response.Content.ReadAsAsync<ReturnModel>().Result;
        return result;
    }

    public ReturnModel getdata(int id)
    {
        var uri = string.Format(_getUri ,id);
        var response = ServiceClient().GetAsync(uri).Result;
        var result = response.Content.ReadAsAsync<ReturnModel>().Result;
        return result;
    }

    private HttpClient ServiceClient()
    {
        var client= _simpleserviceClient ?? new HttpClient();
        client.BaseAddress = new Uri("YOUR_BASE_URL_TO_API");   //"http://localhost:8080/"
        client.Timeout = TimeSpan.FromMinutes(3);
    }
0 голосов
/ 29 ноября 2018

Вы смешали webApi с MVC.Вы не должны использовать RouteConfig, пока не поймете, что делаете.Я предлагаю вернуться к значениям по умолчанию RouteConfig.

Если это mvc, вы можете использовать метод return RedirectToAction("Action Name", "Controller Name");.

Если это веб-API, вы можете вызвать его с помощью программы Postman или в Actionпо

var client = new HttpClient();
HttpResponseMessage message = client.Get(_url);

Получит только ответное сообщение.Вы должны взять это сообщение и прочитать его в виде строки: string json = message.Content.ReadAsString();

Далее вы можете преобразовать json в объект с помощью пакета NewtonsoftJSON:

var result = JsonConvert.DeserializeObject<TypeObject>(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...