清空MVC4应用程序,如何创建一个返回json的简单测试web api控制器?

时间:2013-07-08 18:26:33

标签: c# asp.net-mvc-4 asp.net-web-api

我有一个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

1 个答案:

答案 0 :(得分:5)

在Web API中,名称Post,Get,Put,Delete(默认情况下)映射为请求方法名称,而不是操作名称。您的API路线是:

api/{controller}/{id}

请求:

api/test1/get/1

找不到合适的匹配项,因为框架会尝试将4个令牌与唯一的现有路径定义匹配,其中包含3个令牌(文字api和两个令牌:controller和{{1 }})。

如果您尝试:

id

框架将正确找到 api/test1/get ,但是,基于路由配置,将令牌Test1Controller绑定到"get"参数。当框架尝试根据您的请求(GET请求)找到合适的方法时,它会找到id并找到匹配但无法将令牌Get(int id)转换为整数,这标志着该方法不适合该请求。

但是,如果您尝试此请求:

"get"

它会将令牌api/test1/1 转换为int "1",方法1将匹配。

在Asp.NET Web API中,路由有时会令人困惑。我发现明确地映射我的路线让我更好地理解了这个请求。我建议AttributeRouting integrated in the next version of the Web Api