代码之家  ›  专栏  ›  技术社区  ›  Kirk Liemohn

ASP.NET中关于httphandler路径的规则是什么?

  •  0
  • Kirk Liemohn  · 技术社区  · 16 年前

    关于如何使用httphandler path属性的规则是否有很好的资源?

    当在不同的环境中调用我的处理程序时,我看到了混合的结果,所以让我解释一下…

    我想允许一个URL,例如:

    http://mysite/_layouts/myCompany/rest/myservice.svc/param1/param2
    

    我只想在“mycompany”文件夹/链接下调用我的处理程序,因此我将以下web.config文件放在相应的文件夹中,以免影响应用程序的其余部分。这在某些机器上有效,但在其他机器上无效:

    <configuration>
        <system.web>
            <httpHandlers>
                <add verb="*" path="myservice.svc" type="..." validate="false"/>
            </httpHandlers>
        </system.web>
    </configuration>
    

    现在,我不得不承认,我有点惊讶,因为它基本上必须从“rest/myservice.svc/param1/param2”相对路径中找到“myservice.svc”,但它确实找到了它——但仅在我的三台测试机中的两台上。因此,我在失败的机器上尝试了以下操作:

    <add verb"*" path="rest/myservice.svc/*/*" type="..." validate="false"/>
    

    这工作了几次,现在不工作了。作为一个逻辑型的人,我真的很困扰,在努力了一点之后,我不能解释这一点,但我没能让它再次工作。另请参见 this 类似的堆栈溢出问题。

    请注意,以下内容确实有效,但它使我使用查询字符串变量来提供不理想的参数。

    <add verb"*" path="rest/myservice.svc/*" type="..." validate="false"/>
    

    我查看了两台机器上的父web.config文件,它们给出了不同的结果,以了解它们如何定义任何httphandler,并且没有出现任何问题。

    所以,我想了解一下这条路径是如何被利用的。

    值得一提的是,它运行在一个SharePoint站点上(因此这个问题上的“SharePoint”标记),我使用它来提供REST(简单的“文本/XML”),而不是SOAP。我不想使用完全开放的WCF,因为这样会使SharePoint的安装有点太多,所以我使用的是HTTP处理程序。

    此外,我得到的错误如下:

    virtualPath   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
       at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) 
       at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) 
       at System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext context) 
       at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
       at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Kirk Liemohn    16 年前

    答案仍然是受欢迎的,但在这里我找到了一个简单的解决方法。很简单,这让我很困扰,我以前没有想到…

    因为我从某个点拥有文件夹/URL,所以我可以确保所有内容都经过我的处理程序:

    <add verb"*" path="*" type="..." validate="false"/>
    

    它能有多简单?—S。

    这样做的一个附带好处是,我可以更好地报告不正确URL的错误。我可以决定使用处理程序工厂而不是处理程序;那么唯一的更改是 类型 已指定。

    推荐文章