如何测试WebApi服务?

Max*_*mus 5 c# asp.net rest asp.net-web-api visual-studio-2012

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

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

我尝试从以下论坛应用绿色解决方案: 如何将xml值发布到web api?

我将收到一个带有Contract模型结构的XML字符串.

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

但我在测试我的服务时遇到了麻烦.

我看到许多页面,人们做这样的事情http:// localhost:port/api/contract.但我还不知道它是如何运作的.那么我该如何测试我的服务呢?我测试服务的路径或网址是什么?

Bra*_*tie 5

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

GlobalConfiguration.Configure(WebApiConfig.Register);
Run Code Online (Sandbox Code Playgroud)

然后,定义该类:

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

如果您创建了一个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);
}
Run Code Online (Sandbox Code Playgroud)