[英]Routing of file-like names in Asp.NET WebApi
是否可以在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”的東西在它到達我的代碼之前就已經得到了請求。 最大的問題是:有沒有辦法防止這種情況發生?
您可以在進行以下設置后嘗試:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
替換處理程序路徑篩選器。 Usualy看起來像這樣:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
試試'path =“*”'
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.