如何让{controller}/{id}/{action}在MVC4中工作?

2024-03-25

我已经尝试了一切,但看起来我根本不明白。我的 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) {
        ...
    }
}

这些方法应该通过以下 URL 获得成功:

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

我尝试过很多事情;我肯定在这里做错了什么......请帮忙。


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

public class AccountController : ApiController
{
    public HttpResponseMessage GetByKey(Guid? accountID)
    {
        throw new Exception("GetByKey " + (accountID.HasValue ? accountID.ToString() : "NULL"));
    }

    [System.Web.Http.HttpGet]
    [System.Web.Http.ActionName("Verify")]
    public HttpResponseMessage VerifyAccount(Guid? accountID)
    {
        throw new Exception("VerifyAccount "+(accountID.HasValue?accountID.ToString():"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 }
        );
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让{controller}/{id}/{action}在MVC4中工作? 的相关文章

随机推荐