在WebAPI中调用内部(端点)功能

时间:2018-05-23 13:14:07

标签: asp.net-web-api model-view-controller httpclient

我正在使用Hangfire在我的Web API中执行定期作业,并在" RoutineMethod"中使用System.Web.HttpContext.Current.Server.MapPath。功能

但问题是它抛出了对象null异常。 我搜索了问题,发现定期工作不使用http线程,他们使用后台线程。

现在要解决这个问题,我需要使用httpclient调用我的内部(端点)。

但要做到这一点,我需要提供Web API的URL(以生成URI)。那么有没有其他方法可以使用httpclient调用内部函数。

我目前的代码:

public static async Task<IHttpActionResult> RoutineTask()
        {
            //It was like this before.
            //await new DemoController().RoutineMethod();
            //await new DemoController().RoutineMethod2();

            //I am planning to do this.
            using (var client = new HttpClient())
            {
                //But I need to give URI which I don't think is a good idea.
                var uri = new Uri("http://localhost/DemoApp/api/DemoController/RoutineMethod");
                await client.GetAsync(uri);

            }

            return new DemoController().Ok();
        }

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的。顾名思义,HttpClient需要一个http连接。

在配置文件中存储服务连接信息时没有异味。

然而,为了扩展Nkosi的评论,似乎因为你的代码可以创建一个DemoController的实例,它必须具有对该控制器项目的引用,甚至是在同一个项目中。我会将有趣的代码提取到需要信息的所有区域都可以引用的库或服务中。