首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单声道和IHttpHandler

单声道和IHttpHandler
EN

Stack Overflow用户
提问于 2011-11-17 05:05:22
回答 1查看 2.4K关注 0票数 5

我想在使用IHttpHandler方法的.Net项目中使用XSP或更好的mod_mono。

我有以下类(非常简单:

代码语言:javascript
复制
public class Class1 : IHttpHandler
{
    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        var result = "<h1>Yeah</h1>";
        var bytes = Encoding.UTF8.GetBytes(result);

        context.Response.Write(result);
    }
}

和下面的web.config

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
            <add name="Class" path="*" verb="*" type="IISHost.Class1" resourceType="Unspecified" preCondition="integratedMode" />
        </handlers>
    </system.webServer>
    <system.web>
        <compilation defaultLanguage="c#" />
    </system.web>
</configuration>

它在IIS中可以完美地工作。http://127.0.0.1/test/kfdlsa返回'Yeah‘

在XSP或Apache上的mod_mono中,我可以创建一个index.aspx,它可以根据.Net框架完美地解析和执行,但似乎mod_mono-Framework中并没有包含该处理程序。

是否真的使用IHttpHandler在Mono中实现,或者我是否应该使用另一种方法来收集对某个主机和/或虚拟目录的所有请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 10:19:01

HTTP处理程序和模块在Mono中工作得很好。

您的问题是您的Web.config文件使用特定于IIS的“集成管道”模式的语法。Apache/mod_mono下不存在此模式。因此,您必须使用旧语法(即用于"Classic Pipeline“模式的语法),并在现有的<system.webServer/handlers>部分之外提供一个<system.web/httpHandlers>部分。

请参阅此Web.config示例:

代码语言:javascript
复制
<?xml version="1.0"?>
<configuration>
    <system.web>
        <httpHandlers>
            <add path="*.rss" verb="*" type="CedricBelin.Web.FeedHandler" />
        </httpHandlers>
    </system.web>

    <system.webServer>
        <handlers>
            <add name="Feed" path="*.rss" verb="*" type="CedricBelin.Web.FeedHandler" />
        </handlers>

        <validation validateIntegratedModeConfiguration="false" />
    </system.webServer>
</configuration>

<validation ...>标记非常重要:如果您忘记了它,IIS会抛出一个错误,并抱怨在集成管道上下文中使用了一个未经授权的部分。

下一步是指示Apache服务器将您的文件的处理工作转移到mod_mono,如下所示:

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName mono.localhost
    DocumentRoot "/Library/WebServer/Documents/MonoTest"
    AddType application/x-asp-net .rss
</VirtualHost>

AddType application/x-asp-net .rss这一行很重要。在这一行中查看Web.config中的path="*.rss".rss扩展之间的关系。如果您希望处理所有扩展,如示例(path="*")所示,则必须将AddType application/x-asp-net .rss行替换为ForceType application/x-asp-net

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8158665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档