我正在尝试使用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”并调用操作?
任何帮助表示赞赏。
答案 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