【问题标题】:Asp.Net WebAPI and custom WebDav handlerAsp.Net WebAPI 和自定义 WebDav 处理程序
【发布时间】: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


    【解决方案1】:

    好的,我和我的同事已经想通了……

    RouteConfig.cs 和 WebApiConfig.cs(这两个文件可以在 asp.net 的示例中找到)的注册顺序很重要..

    在 global.asax 中,它是:

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    

    这样 WebApi 路由首先进入 IIS。路由集合中没有忽略方法。

    但是,通过首先注册 RouteConfig,您确实有 ignore 方法,然后可以忽略 dav 请求并传递到处理程序。

    RouteConfig.RegisterRoutes(RouteTable.Routes);
            WebApiConfig.Register(GlobalConfiguration.Configuration);
    

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多