空的MVC4应用程序,如何创建一个返回json的简单测试web api控制器
本文关键字:json 返回 简单 控制器 api web 测试 一个 应用程序 MVC4 何创建 | 更新日期: 2023-09-27 18:21:36
我有一个MVC4应用程序,我创建了一个基于测试webapi的控制器,看起来像:
public class User1
{
public int Id { get; set; }
public string name { get; set; }
public User1(int id, string name)
{
this.Id = id;
this.name = name;
}
}
public class Test1Controller : ApiController
{
public User1 Get(int id)
{
return new User1(id, "hello");
}
}
我注意到我有一个webapiconfig类:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
我假设这将在默认情况下输出json结果,对吗?
当我去:
http://localhost:61146/api/test1/get/1
或
http://localhost:61146/test1/get/1
我得到这个错误:
The resource cannot be found.
这到底是如何映射的,还是我必须将它放在一个特殊的文件夹中?我猜它会自己映射它,因为我继承了ApiController
在Web API中,名称Post、Get、Put、Delete(默认情况下)映射为请求方法名称,而不是操作名称。您的API路线是:
api/{controller}/{id}
请求:
api/test1/get/1
找不到合适的匹配,因为框架将尝试将4个令牌与仅有的现有路由定义进行匹配,该路由定义包含3个令牌(字面api
和两个令牌:controller
和id
)。
如果你尝试:
api/test1/get
框架将正确地找到Test1Controller
,但基于路由配置,将把令牌"get"
绑定到id
参数。当框架试图根据您的请求(GET请求)找到合适的方法时,它会找到Get(int id)
并找到匹配项,但无法将令牌"get"
转换为整数,这将该方法标记为不适合该请求。
但是,如果您尝试此请求:
api/test1/1
它将把令牌"1"
转换为int 1
,并且方法Get(int id)
将是匹配的。
在Asp.NET Web API中,路由有时会令人困惑。我发现,明确地映射我的路线可以让我更好地理解请求。我建议AttributeRouting,它将集成在下一版本的WebApi中。