C# 如何测试WebApi服务?

C# 如何测试WebApi服务?,c#,asp.net,rest,visual-studio-2012,asp.net-web-api,C#,Asp.net,Rest,Visual Studio 2012,Asp.net Web Api,我对WebApi非常陌生,我一直在阅读有关它的信息,但我不知道如何启动我的应用程序 我已经有了一个与许多WFC服务一起使用.NET3.5的项目。因此,我将我的项目更新为4.5.1。然后,我使用Visual Studio 2012向导创建了一个控制器。然后,在创建控制器时,我将一个类视为带有get、post、put和delete方法的模板。所以我放置了post方法,最后我想用HttpClient测试服务 我尝试从以下论坛应用绿色解决方案: 我将收到一个带有合同模型结构的XML字符串 我将我的项目

我对WebApi非常陌生,我一直在阅读有关它的信息,但我不知道如何启动我的应用程序

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

我尝试从以下论坛应用绿色解决方案:

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

我将我的项目运行到VisualStudioDevelopmentServer中

但我有麻烦的URL来测试我的服务


我看到很多页面上有人这样做,但我仍然不知道它是如何工作的。那么,如何测试我的服务呢?测试我的服务的路径或url是什么?

WebApi和MVC一样,都是基于路由的。默认路由是
/api/{controller}/{id}
(当然可以更改)。这通常可以在新项目的
~/App\u Start/WebApiConfig.cs
文件中找到,但是考虑到您正在迁移,您不太可能拥有它。因此,要将其连接起来,您可以修改
应用程序\u 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);
}
[TestMethod]
public void应返回单个产品()
{
//安排
var repo=新的FakeRepository();
var控制器=新WidgetController(回购);
预期风险值=回购发现(1);
//表演
var actual=controller.GetWidget(1)作为OkNegotiatedContentResult;
//断言
Assert.IsNotNull(实际值);
Assert.AreEqual(expected.Id、actual.Content.Id);
}

该URL是在运行项目时从Visual Studio生成的。项目运行时,您可以通过Google apps转到诸如Advanced REST Client之类的应用程序,以测试在web服务中获取和发布数据。您可能需要阅读,也可能需要。@BCdotWEB,非常感谢您的文章。他们非常有用!!!谢谢你的回答。我知道我错过了。这不是一个新项目,我正在从3.5迁移到4.5.1。我要读有关路由的书。我认为路由表没有配置。@MaximusDecimus:更新的答案以适应。