加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 如何让{controller} / {id} / {action}在MVC4

发布时间:2020-12-16 09:53:02 所属栏目:asp.Net 来源:网络整理
导读:我已经尝试了所有东西,但看起来我根本就没有得到它.我的WebApiConfig.cs看起来像这样: config.Routes.MapHttpRoute( "Default","api/{controller}/{id}",new { id = RouteParameter.Optional });config.Routes.MapHttpRoute( "AccountVerification","api/{c
我已经尝试了所有东西,但看起来我根本就没有得到它.我的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) {
        ...
    }
}

这些方法应该受到以下网址的影响:

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

我尝试了很多东西;我肯定在这里做错了…请帮忙.

解决方法

首先,如果你想用假Guids测试,以及有可选的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 }
    );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读