如何为ASP.Net创建一个准系统HttpApplication(没有Webforms或MVC)

Ear*_*rlz 5 asp.net web-config httpapplication global-asax

好的,我想了解更多有关ASP.Net如何在幕后工作的信息.我的意思是MVC或Webforms以及其他类似的框架.

基本上我想知道这些框架如何连接到ASP.Net,以便它们与IIS一起工作.创建一个简单的HttpApplication,与IIS一起使用并且既不使用MVC也不使用Webforms,最低限度是什么?在Web.config中需要的最低要求是什么?什么会被添加到Global.asax?

sma*_*man 6

写一个继承自的类IHttpHandler.接口定义是:

public interface IHttpHandler
{
    void ProcessRequest(HttpContext context);
    bool IsReusable { get; }
}
Run Code Online (Sandbox Code Playgroud)

HttpContext是执行应用程序所需的全部内容.它充当了交互所涉及的所有内容.该Server属性为您提供有关服务器的信息.该Request属性为您提供有关HttpRequest的信息,该Response属性提供了一种向客户端呈现输出的方法.

我的建议是在HttpContext上使用Reflector,并了解它包含的内容以及每个组件的工作原理.

这是一个基本的应用示例:

public class HelloWorldHandler: IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write("Hello World");
        context.Response.End();
    }

    public bool IsReusable
    {
        get { return false; }
    }
}
Run Code Online (Sandbox Code Playgroud)

Global.asax不必包含任何东西.使用派生自的类来处理全局事件可能是更好的做法IHttpModule.

必须以不同的方式处理web.config,具体取决于您使用的是IIS 7还是其他.无论哪种方式,都有一个HttpHandler部分,您必须注册自定义处理程序来处理所有请求.

您可以使web.config非常小,但包含的配置部分的数量取决于您想要的功能.此外,可以使用IIS直接管理web.config处理的一些内容.有关详细信息,请查看http://msdn.microsoft.com/en-us/library/b5ysx397(v=VS.85).aspx.

我希望这有帮助.如果您对所需内容更具体,我们可以为您提供更好的信息.


Ear*_*rlz 2

我实际上是想自己回答这个问题,因为我已经这样做了。smartcaveman 提供了部分解决方案。

我为 web.config做了什么:

<?xml version="1.0"?>
<configuration>
    <system.web>
       <compilation debug="true">
       </compilation>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!--
    The system.webServer section is required for running ASP.NET AJAX under Internet
    Information Services 7.0. It is not necessary for previous version of IIS.
    -->
    <system.webServer>
    </system.webServer>
    <runtime>
    </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后在 global.asax 中:

protected virtual void Application_BeginRequest (Object sender, EventArgs e)
{
    if (Request.Url.AbsolutePath == "/test") 
    {
        var h=new Test1(); //make our Test1.ashx handler
        h.ProcessRequest(Context);
    }
    else
    {
        Response.ContentType = "text/plain";
        Response.Write("Hi world!");
    }
    CompleteRequest();
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 ASP.Net 内容处理程序(如图所示),或者您当然可以编写自己的替换内容并自己写入 Response。

作为参考,我用自定义路由引擎(和视图引擎)制作的工作框架在subversion 中