尽管我在直接 MVC 中使用了路由,但我并没有过多地使用 ASP.NET WebAPI。显然我做错了什么,也许有人可以帮忙?我有一个名为 UsersController 的控制器和两个方法,Register 和 Details,它们都接受两个字符串参数并返回一个字符串,都标记为 HttpGet。最初我从 WebApiConfig.cs 中的两个路由映射开始:
config.Routes.MapHttpRoute(
name: "TestApi",
routeTemplate: "api/{controller}/{action}/{userId}/{key}"
);
config.Routes.MapHttpRoute(
name: "Test2Api",
routeTemplate: "api/{controller}/{action}/{userId}/{class}"
);
通过此设置,只能找到 URL 的第一个路由,例如:
http://<domain>/api/users/register/a123/b456/
如果我打电话:
http://<domain>/api/users/details/a123/b456/
我得到一个 404。如果我交换两条路由,那么我可以调用 Details 方法但不能调用 Register 方法,再次得到 404。我采用的解决方法是更具体地使用路由:
config.Routes.MapHttpRoute(
name: "TestApi",
routeTemplate: "api/{controller}/register/{userId}/{key}"
);
config.Routes.MapHttpRoute(
name: "Test2Api",
routeTemplate: "api/{controller}/details/{userId}/{class}/"
);
用户控制器看起来像:
namespace HelloWebAPI.Controllers
{
using System;
using System.Web.Http;
using HelloWebAPI.Models;
public class UsersController : ApiController
{
[HttpGet]
public string Register(string userId, string key)
{
return userId + "-" + key;
}
[HttpGet]
public string Enrolments(string userId, string @class)
{
return userId + "-" + @class
}
}
}
所以我不明白为什么第二个注册的路由的 {action} 组件没有与正确的方法相关联。
谢谢
乔