Asp.net mvc 4 如何使{controller}/{id}/{action}在MVC4中工作?

Asp.net mvc 4 如何使{controller}/{id}/{action}在MVC4中工作?,asp.net-mvc-4,Asp.net Mvc 4,我什么都试过了,但看起来一点都不懂。我的WebApiConfig.cs如下所示: config.Routes.MapHttpRoute( "Default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); config.Routes.MapHttpRoute( "AccountVerification", "api/{controller}/{id}/{action}",

我什么都试过了,但看起来一点都不懂。我的WebApiConfig.cs如下所示:

config.Routes.MapHttpRoute(
    "Default",
    "api/{controller}/{id}",
    new { id = RouteParameter.Optional });

config.Routes.MapHttpRoute(
    "AccountVerification",
    "api/{controller}/{id}/{action}",
    null,
    new { controller = "Account" });
public class AccountController : ApiController {
    public HttpResponseMessage GetByKey(Guid accountID) {
        ...
    }

    [HttpGet]
    [ActionName("Verify")]
    public HttpResponseMessage VerifyAccount(Guid accountID) {
        ...
    }
}
我的控制器如下所示:

config.Routes.MapHttpRoute(
    "Default",
    "api/{controller}/{id}",
    new { id = RouteParameter.Optional });

config.Routes.MapHttpRoute(
    "AccountVerification",
    "api/{controller}/{id}/{action}",
    null,
    new { controller = "Account" });
public class AccountController : ApiController {
    public HttpResponseMessage GetByKey(Guid accountID) {
        ...
    }

    [HttpGet]
    [ActionName("Verify")]
    public HttpResponseMessage VerifyAccount(Guid accountID) {
        ...
    }
}
这些方法应该通过以下URL获得成功:

GET /api/account                                        - WORKS
GET /api/account/00000000-0000-0000-000000000001        - WORKS
GET /api/account/00000000-0000-0000-000000000001/verify - DOESNT WORK

我试过很多东西;我在这里肯定做错了……请帮助。

GET/api/account/00000000-0000-0000-000000000001/验证是否与路由集合中的第一条路由匹配。因此,它从不检查第二条路径是否匹配。将“api/{controller}/{id}/{action}”作为集合中的第一个路由,它应该可以正常工作

首先,如果您想使用伪Guid进行测试,并且具有可选的Guid参数,它们必须是可为null的参数(伪Guid将反序列化为null):

然后,您的映射应该:

  • 首先使用最具体的路线
  • 使用正确的参数名称
  • 对操作使用正确的默认值

    config.Routes.MapHttpRoute(
        "AccountVerification",
        "api/{controller}/{accountID}/{action}"
        );
    
    
    config.Routes.MapHttpRoute(
        "Default",
        "api/{controller}/{accountID}",
        defaults: new { Controller="Account", action = "GetByKey", accountID = RouteParameter.Optional }
        );
    

好的,我这样做了,但仍然是一样的消息:“没有找到与请求URI‘api/account/f476397e-5e3e-470b-8621-573d63698cd7/verify’匹配的HTTP资源”,看起来api和控制器操作之间有‘v1’。您需要删除它或将其添加到路由定义-“api/v1/{controller}/{id}/{action}”。今晚我将尝试一下。问题-不是假的guid还是guid;我的意思是,为什么它会反序列化为null,而且,我的要求是必须提供VerifyAccount方法的accountID参数…这不是可选的,{action}必须是“verify”才能解析为VerifyAccount方法…到目前为止,应用程序中没有其他操作。非常感谢您的帮助。