簡體   English   中英

在Asp.NET WebApi中路由類似文件的名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM