如何指定Web API路线

时间:2018-11-29 06:44:51

标签: c# asp.net-web-api

我正在尝试使用HttpClient调用api操作方法。 这是我的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());
        }
}

以下是“路由”配置:

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指定为“ GetAllOU”的操作Route 如您所见,当使用HttpClient调用api时,我会将“ GetAllOU”附加到URL。我认为必须有一种无需将任何内容附加到URL即可调用此api的好方法。 有什么方法可以指定路线“ GetAllOU”并调用操作?

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您已将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();

接下来,您可以通过NewtonsoftJSON包将json转换为对象:

var result = JsonConvert.DeserializeObject<TypeObject>(json);

答案 1 :(得分:0)

希望这将为您提供一种简便的服务客户方法。

if