【发布时间】:2013-03-11 07:44:30
【问题描述】:
虽然我在直接 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}/"
);
UsersController 看起来像:
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} 组件没有与正确的方法关联。
谢谢
乔
【问题讨论】:
-
您能分享一下您的操作“注册”和“详细信息”是什么样的吗?
-
我已将课程添加到帖子中。
标签: asp.net asp.net-web-api asp.net-web-api-routing