如何从我的解决方案中的其他项目中使用我的Web Api项目?

时间:2014-07-10 18:01:36

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

我正在开发ASP.NET Web Api和ASP.NET网站。 该网站将使用Web Api,移动应用程序也将通过REST使用Web Api。

单独开发这两个版本很顺利,但我现在正处于从网站开始测试Web Api的阶段,理想情况下,所有这些都来自visual studio。例如,我有一个页面,我有一个表单,完成后会调用我的Web Api将用户添加到数据库。上传这些在线进行测试显然是不可能的。

那么这里的最佳做法是什么?你能简单地从网站项目(Aspx)中引用Web Api,还是有其他方法可以解决这个问题。

3 个答案:

答案 0 :(得分:11)

访问Web API控制器和操作基于URL。现在,他们在单独的项目中,您需要同时同时运行两个项目,以使您的API可用于MVC项目。

并且您应该为 web api 项目启用 CORS ,以便您可以从 MVC项目访问它>

答案 1 :(得分:4)

使用以下代码来使用web api项目

    public async Task <ActionResult> Index()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:54568/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("api/Values/"); //API controller name
            if (response.IsSuccessStatusCode)
            {
                var result = await response.Content.ReadAsAsync<YourReturnDataType>();
                if (result != null)
                    var output = result;
            }
        }

        return View("Return your model here");
    }

答案 2 :(得分:2)

这取决于你想要测试的内容。如果您只想测试控制器实现,可以创建测试项目并引用项目,手动实例化控制器,并在测试中调用它们。

如果要通过网络进行集成测试,可以自行托管web api服务。然后在测试项目中安装web api客户端软件包Install-Package Microsoft.AspNet.WebApi.Client并通过客户端调用。

示例链接和手动实例化(来自链接):

[TestClass]
public class TestSimpleProductController
{
    [TestMethod]
    public void GetAllProducts_ShouldReturnAllProducts()
    {
        var testProducts = GetTestProducts();
        var controller = new SimpleProductController(testProducts);

        var result = controller.GetAllProducts() as List<Product>;
        Assert.AreEqual(testProducts.Count, result.Count);
    }

使用web api客户端的示例(来自链接):

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:9000/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new                 MediaTypeWithQualityHeaderValue("application/json"));

    // New code:
    HttpResponseMessage response = await client.GetAsync("api/products/1");
    if (response.IsSuccessStatusCode)
    {
        Product product = await response.Content.ReadAsAsync>Product>();
        Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category);
    }
}

自托管服务:

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

对于Web Api client

Install-Package Microsoft.AspNet.WebApi.Client