【发布时间】:2012-08-30 09:01:51
【问题描述】:
背景: 当前系统有一个自定义的 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,类型控制器类型)在 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称)在 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext、IController&控制器、IControllerFactory&工厂)
在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext、AsyncCallback 回调、对象状态)在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, Boolean & completedSynchronously)
【问题讨论】:
标签: asp.net asp.net-web-api webdav