上下文: 当前系统有一个自定义的 WebDav HttpHandler 来处理文件上传、编辑等。网站是基于 WebFrom 的。新的 WebAPI 将建立在此之上。
使用 Asp.Net 提供的示例项目。集成工作正常,除了 WebDav 被破坏之外的所有 WebForms 和 WebAPI 方法。
问题: 在 global.asax 中注册 WebAPI 后,HTTP PUT 请求总是被发送到 WebAPI 路由,WebDav 的 PUT 请求不会匹配并得到 404 响应(异常?)。
根据这篇 [文章][1],看起来 HTTPRouting 与 MVC 路由不同。HttpConfiguration.Routes 没有 ignore() 路由。
要实现的目标: PUT 请求能够被区分并相应地发送到 WebAPI 或 WebDav 处理程序。例如:任何与 WebAPI 路由模式不匹配的请求请求都将沿管道传递给处理程序,而不是获取异常响应。
WebDav put request 看起来像这样,它也是虚拟化的:
PUT /dav/{USERID}/{AUTH_TOKEN}/{PRAMS}/{PATHINFO}2.png
--编辑
路由引擎的异常。我正在寻找的是一种在找不到控制器时传递请求的方法,让 IIS 管道中的其他处理程序/模块来处理请求而不是抛出错误响应。
响应由 WebAPI 生成,它不会传递给 CustomWebDavHandler:
[HttpException]:路径 {my WebDav virtual path} 的控制器未找到或未实现 IController。在 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) 在 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 在 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& 控制器, IControllerFactory& factory)
在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication .ExecuteStep(IExecutionStep 步骤,布尔值&