【问题标题】:How to test a WebApi service?如何测试 Web Api 服务?
【发布时间】:2015-08-19 05:57:43
【问题描述】:

我是 WebApi 的新手,我一直在阅读有关它的信息,但我不知道如何启动我的应用程序。

我已经有一个使用 .Net 3.5 包含许多 WFC 服务的项目。所以,我将我的项目更新到 4.5.1。然后我使用 Visual Studio 2012 向导创建了一个控制器。然后,当创建控制器时,我看到一个类作为带有 get、post、put、delete 方法的模板。所以我放置了我的 post 方法,最后我想用 HttpClient 测试服务。

我尝试从以下论坛应用绿色解决方案: How to post a xml value to web api?

我将收到一个具有合同模型结构的 XML 字符串。

我在 Visual Studio Development Server 中运行我的项目。

但我无法使用 URL 来测试我的服务。

我在很多页面上看到人们会这样做http://localhost:port/api/contract但我仍然不知道它是如何工作的。那么我该如何测试我的服务呢?测试我的服务的路径或网址是什么?

【问题讨论】:

  • 该 URL 是在您运行项目时从 Visual Studio 生成的。项目运行时,您可以通过 Google Apps 访问 Advanced REST Client 等应用程序,以测试从 Web 服务获取和发布数据。
  • @BCdotWEB,非常感谢您的文章。他们非常有用!!!

标签: c# asp.net rest visual-studio-2012 asp.net-web-api


【解决方案1】:

WebApi 和 MVC 一样,都是基于路由的。默认路由是/api/{controller}/{id}(当然可以更改)。这通常可以在新项目的~/App_Start/WebApiConfig.cs 文件中找到,但鉴于您正在迁移,您不太可能拥有它。因此,要将其连接起来,您可以修改您的 Application_Start 以包括:

GlobalConfiguration.Configure(WebApiConfig.Register);

然后,定义那个类:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

如果您创建了一个TestController 控制器并希望向本地运行的实例发出POST 请求,您将访问http://localhost:12345/api/Test/(使用适当的动词)。 12345 将是 Visual Studio 用于托管您的服务的本地端口(可以通过查看项目的属性,然后导航到“Web”选项卡来找到)。

话虽如此,最好在项目上执行测试(无需进行外部调用)。关于这个主题有几个帖子,但通常归结为以下内容:

[TestMethod]
public void Should_Return_Single_Product()
{
    // Arrange
    var repo = new FakeRepository<Widget>();
    var controller = new WidgetController(repo);
    var expected = repo.Find(1);

   // Act
   var actual = controller.GetWidget(1) as OkNegotiatedContentResult<Widget>;

   // Assert
   Assert.IsNotNull(actual);
   Assert.AreEqual(expected.Id, actual.Content.Id);
}

【讨论】:

  • 感谢您的回答。我看到我错过了。这不是一个新项目,我正在从 3.5 迁移到 4.5.1。我将阅读有关路由的内容。我认为没有配置路由表。
  • @MaximusDecimus:更新了答案以适应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多