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

Per*_*ion 16 c# asp.net asp.net-web-api

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

分别开发这两个很好,但我现在正处于我想从网站开始测试Web Api的阶段,最好是在视觉工作室内.例如,我有一个页面,我有一个表单,完成后会调用我的Web Api将用户添加到数据库.上传这些在线进行测试自然是不可能的.

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

moh*_*sti 12

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

顺便说一句,您应该为您的web api项目启用CORS,以便您可以从MVC项目访问它.

  • 对于像VS这样的巨大计划来说,这很难实现;)我从这个问题中学到了很多东西!感谢您提供更多信息.真的很感激 (3认同)
  • @PersuitOfPerfection您不需要打开多个Visual Studio实例。右键单击您的解决方案,选择“公共属性”,然后在“启动项目”中可以指定多个启动项目。如果您的api在端口4000上运行,则您的网站只会访问http:// localhost:4000。 (2认同)

wbe*_*ett 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);
    }
Run Code Online (Sandbox Code Playgroud)

使用 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于自托管服务:

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

对于Web Api 客户端

Install-Package Microsoft.AspNet.WebApi.Client
Run Code Online (Sandbox Code Playgroud)