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

asp.net-mvc-4 – MVC 4.5 Web API路由无法正常工作?

发布时间:2020-12-16 00:11:43 所属栏目:asp.Net 来源:网络整理
导读:第一条路线有效. 例如API /货架/ SpaceTypes / 1 第二条路线不起作用.我得到多个动作错误. 例如api / Shelves / 1 问)为什么? 这些是我的路线: config.Routes.MapHttpRoute( "DefaultApiWithAction","api/{controller}/{action}/{id}");config.Routes.MapH
第一条路线有效.

例如API /货架/ SpaceTypes / 1

第二条路线不起作用.我得到多个动作错误.

例如api / Shelves / 1

问)为什么?

这些是我的路线:

config.Routes.MapHttpRoute(
    "DefaultApiWithAction","api/{controller}/{action}/{id}"
);

config.Routes.MapHttpRoute(
    "DefaultApiWithId","api/{controller}/{id}",null,new { id = @"d+" }
);

这是我的控制器:

public HttpResponseMessage Get(int id)
{
     ...
}

[ActionName("SpaceTypes")]
public HttpResponseMessage GetSpaceTypes(int id)
{
     ...
}

解决方法

对于MVC 4.5,这是唯一可行的

目前有一个bug about this.

为了使您的路由工作,以下工作

api/Shelves/ //Get All Shelves
api/SpaceTypes/1 //Get Shelf of id 1
api/Shelves/1/SpaceTypes/  //Get all space types for shelf 1

你需要做以下事情.

将您的路由更改为. (注意默认操作..)

config.Routes.MapHttpRoute(
    name : "DefaultAPi",routeTemplate : "api/{controller}/{id}/{action}",defaults: new {id= RouteParameter.Optional,action = "DefaultAction"}
);

在您的控制器中将基本方法更改为

[ActionName("DefaultAction")]
public string Get()
{
}

[ActionName("DefaultAction")]
public string Get(int id)
{
}

[ActionName("SpaceTypes")]
public string GetSpaceTypes(int id)
{
}

现在一切都应该按预期工作了..

感谢Kip Streithorst全程,for a full explanation

(编辑:李大同)

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

    推荐文章
      热点阅读