【问题标题】:What are the rules around httpHandler paths in ASP.NET?ASP.NET 中关于 httpHandler 路径的规则是什么?
【发布时间】:2009-06-05 18:19:05
【问题描述】:

关于如何使用 httpHandler 路径属性的规则是否有很好的资源?

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

我想允许这样的 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 类似的 Stack Overflow 问题。

请注意,以下确实有效,但它让我求助于查询字符串变量来提供不理想的参数。

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

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

所以,我希望了解如何使用这条路径。

对于它的价值,这是在 SharePoint 网站中运行的(因此在这个问题上使用了“sharepoint”标签),我使用它来提供 REST(简单的“text/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) 

【问题讨论】:

    标签: asp.net sharepoint httphandler


    【解决方案1】:

    仍然欢迎回答,但在这里我找到了一个简单的解决方法。如此简单,让我感到困扰,我以前没有想到它......

    由于我从某个时间点拥有文件夹/url,我可以确保一切都通过我的处理程序:

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

    它有多简单:-S。

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

    【讨论】:

    • 答案here可能是相关的。
    猜你喜欢
    • 1970-01-01
    • 2016-06-18
    • 2022-02-02
    • 2010-11-14
    • 2020-08-22
    • 2015-08-09
    • 2016-10-07
    • 2012-08-19
    • 2010-11-23
    相关资源
    最近更新 更多