c# - 如何测试 Web Api 服务?

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

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

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

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

我将收到一个具有契约(Contract)模型结构的 XML 字符串。

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

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

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

最佳答案

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 Controller 并想向本地运行的实例发出一个 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);
}

关于c# - 如何测试 Web Api 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646952/

相关文章:

c# - 与声明实例变量的方式不同

c# - 有没有办法我们可以动态添加伪元素 css 作为内联 css

c# - 省略 XML 声明?

c# - BHO OnDocumentComplete 仅适用于顶部框架?

javascript - Javascript 中 ASP.NET View 状态的大小

javascript - 尝试在 https ://api. thetvdb.com/向 TVDB REST API 发出 JSON POST 请求,但收到 CORS 错误

javascript - 使用循环设置 HTML 文本

asp.net - 如何禁用 aspx 页面上使用 <Enter> 触发的按钮

javascript - 为什么自定义验证器在 jQuery 的 document.ready 中不起作用

java - 如何将 nginx 连接到我的 java 模块