ASP.NET中的httpHandler路径有哪些规则?

时间:2009-06-05 18:19:05

标签: asp.net sharepoint httphandler

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

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

我想允许使用以下网址:

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文件,它们给出了不同的结果,看看它们如何定义任何httpHandler,没有任何问题突然出现。

所以,我正在寻找对如何利用这条道路的理解。

对于它的价值,这是在SharePoint站点中运行(因此在这个问题上的“sharepoint”标签),我使用它来提供REST(简单的“text / xml”)而不是SOAP。我不想使用完整的WCF,因为这会使得船的安装过多,因此我使用的是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 个答案:

答案 0 :(得分:0)

答案仍然是受欢迎的,但在这里我找到了一个简单的解决方法。如此简单,让我感到困扰的是我之前没想过......

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

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

它有多简单:-S。

这样做的另一个好处是我可以更好地报告错误URL的错误。我可能决定使用处理程序工厂而不是处理程序;然后唯一的变化是指定的类型