【发布时间】:2017-06-15 05:02:44
【问题描述】:
是否可以在 ASP.NET Web API 路由配置中添加一个路由,以允许处理看起来有点像文件名的 URL?
我尝试在WebApiConfig.Register() 中添加以下条目,但这不起作用(使用 URI api/foo/0de7ebfa-3a55-456a-bfb9-b658165df5f8/bar.group.json):
config.Routes.MapHttpRoute(
name: "ContextGroupFile",
routeTemplate: "api/foo/{id}/{filetag}.group.json",
defaults: new { controller = "foo", action = "getgroup"}
);
以下确实有效(它按预期调用了FooController.GetGroup(id,filetag))(使用URI api/foo/0de7ebfa-3a55-456a-bfb9-b658165df5f8/group/bar):
config.Routes.MapHttpRoute(
name: "ContextGroupFile",
routeTemplate: "api/foo/{id}/group/{filetag}",
defaults: new { controller = "foo", action = "getgroup"}
);
失败的案例返回一个 IIS 错误(404 - 找不到文件),看起来它是由我的应用程序之外的东西创建的。错误页面(由 IIS Express 生成)包含以下错误详细信息:
Module = IIS Web Core
Notification = MapRequestHandler
Handler = StaticFile
Error Code = 0x80070002
我猜这意味着一个叫做“StaticFile Handler”的东西在请求到达我的代码之前就已经掌握了它。最大的问题是:有没有办法防止这种情况发生?
【问题讨论】:
标签: c# asp.net-web-api asp.net-web-api-routing