gpt4 book ai didi

asp.net-mvc - Asp.net MVC/Web Api路由: Need to route a little different

转载 作者:行者123 更新时间:2023-12-04 13:14:25 25 4
gpt4 key购买 nike

我已经使用路由设置了一个asp.net Web API项目(其工作原理与Mvc项目完全相同)-因此,我有以下内容

routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

所以一切都按照我想要的方式工作....我输入api/Products/15,它到达我的产品 Controller 中,并传入15作为id。

伟大的。

我还拥有2个 Controller ,其中1个称为UploadsController,另外1个称为DownloadsController。这些提供上载和下载(GET/PUT等)

现在我不希望它们被原始规则接受(见上文)

但是我想使用这2个网址来访问它们

/api/运输/上传/15
/api/运输/下载/15

我已经通过了15作为ID,在现实生活中可能不会发生……只是它对演示的好处:-)

现在运输不存在,所以我可以执行以下操作
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/Transports/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

我相信这是有效的...

但问题是,如果我这样做

/api/Uploads/15-这也将被我不想要的原始规则捕获。

我希望通过伪造的“传输”而不是没有传输来访问“上载和下载负载” Controller

有人可以帮忙吗?

提前致谢

最佳答案

您可以使用route constraints并按以下顺序定义2条API路由:

// matches /api/transports/downloads/id or /api/transports/uploads/id only
// and no other possible controller
routes.MapHttpRoute(
name: "API Transport",
routeTemplate: "api/transports/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { controller = "uploads|downloads" }
);

// matches anything in the form /api/{controller}/id where {controller}
// could be anythnig different than "downloads" or "uploads" because we don't
// want to allow the following urls: /api/downloads/id and /api/uploads/id
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { controller = @"^((?!(downloads|uploads)).)*$" }
);

关于asp.net-mvc - Asp.net MVC/Web Api路由: Need to route a little different,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com