Я пытаюсь вызвать метод действия 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" и вызвать действие?
Любая помощь приветствуется.