C# 来自另一个项目的asp.net webapi selfhost控制器

C# 来自另一个项目的asp.net webapi selfhost控制器,c#,asp.net-web-api2,owin,self-host-webapi,C#,Asp.net Web Api2,Owin,Self Host Webapi,我有一个webapi2项目,我想在另一个项目中自托管这个api,并使用httpClient调用这些方法。这是我的密码: namespace TestSelfHosting.Controllers { public class ProductsController : ApiController { [HttpGet] public string GetProduct() { return "test";

我有一个
webapi2
项目,我想在另一个项目中自托管这个api,并使用
httpClient
调用这些方法。这是我的密码:

namespace TestSelfHosting.Controllers
{
    public class ProductsController : ApiController
    {
        [HttpGet]
        public string GetProduct()
        {
            return "test";
        }
    }
}
以及来自测试项目的代码:

namespace TestSelfHosting.Tests
{
    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            appBuilder.UseWebApi(config);
        }
    }
}

namespace TestSelfHosting.Tests
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            const string baseAddress = "http://localhost:9000/";

            // Start OWIN host 
            using (WebApp.Start<Startup>(url: baseAddress))
            {
                // Create HttpCient and make a request to api/values 
                HttpClient client = new HttpClient();

                var response = client.GetAsync(baseAddress + "api/products").Result;

                var content = response.Content.ReadAsStringAsync().Result;
            }
        }
    }
}
namespace TestSelfHosting.Tests
{
公营创业
{
公共无效配置(IAppBuilder appBuilder)
{
//为自主机配置Web API。
HttpConfiguration config=新的HttpConfiguration();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
appBuilder.UseWebApi(配置);
}
}
}
命名空间TestSelfHosting.Tests
{
[测试类]
公共类UnitTest1
{
[测试方法]
公共void TestMethod1()
{
常量字符串基地址=”http://localhost:9000/";
//在主机中启动OWIN
使用(WebApp.Start(url:baseAddress))
{
//创建HttpCient并向api/values发出请求
HttpClient=新的HttpClient();
var response=client.GetAsync(baseAddress+“api/products”).Result;
var content=response.content.ReadAsStringAsync().Result;
}
}
}
}
但是当我调用
client.GetAsync
方法时,抛出了一个错误(404,未找到)。这是可能实现的还是我做错了什么


我遵循了

中的教程。您是否在自宿主项目(测试项目)中引用了webapi2项目


如果没有,请转到您的自宿主项目->引用->添加引用->找到您的webapi2.dll并添加它(您必须事先构建您的webapi2项目以“生成”dll文件)

您是否尝试调用方法Get而不是GetProduct?如您所见,如果我在不执行任何操作的情况下使用Get谓词,支持调用GetProducts方法。如果我从邮递员那里调用这个url,它将返回字符串测试