【问题标题】:How does an ASP website match a dll to a webpage?ASP 网站如何将 dll 与网页匹配?
【发布时间】:2012-12-22 09:26:14
【问题描述】:

当你转到一个 ASP 网站的根目录(webforms 或 MVC)时,web 服务器如何知道要加载哪个 .aspx 或 .cshtml 文件,以及bin/ 目录中的哪个 dll 包含要执行的代码?两者如何匹配?

【问题讨论】:

  • 对于 MVC,msdn.microsoft.com/en-us/library/… 可能会给你一些你想要的信息
  • 它如何从没有程序集引用的纯文本 Global.asax 文件中执行代码以首先创建路由?
  • 为什么有人反对这个问题?

标签: asp.net .net asp.net-mvc iis webdev.webserver


【解决方案1】:

我不知道您是在寻找一个非常技术性的答案,还是一个简单的概述。所以,这里有一个简单的概述

默认文档

当您转到 ASP 网站的根目录时

ASP、HTML、PHP 或您使用的任何技术,Web 服务器知道默认文档要搜索并在未提供文档时显示,例如,在 Microsoft IIS Server 中,默认文档是:

这对于 Apache 服务器也是如此,有一个设置告诉服务器“如果你没有文档名称,请使用这个”设置,这个设置在 .htaccess 文件中,并且有:

DirectoryIndex  index.php index.html index.htm default.html default.htm home.html

在 ASP.NET MVC 中,您使用路由表,并且在 Global.asax 文件中提到了路由,可以通过直接指定路由或调用外部文件(类),常见的路由是:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

这表明,如果没有提供路由,它将与/Home/Index 相同。

程序集

关于DLLs 部分,这完全是关于您的第一个文档...

.NET 站点已预编译并公开了它们的命名空间和属性,您将在 ASP.NET Webforms 中拥有类似这样的第一行代码:

<%@ Page Title="Home Page" Language="C#" 
    MasterPageFile="~/Site.Master" 
    AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" 
    Inherits="WebApplication3._Default" %>

这告诉服务器在Default.aspx.cs 中运行WebApplication3._Default,并从那里附加任何需要的程序集来运行代码。

【讨论】:

  • +1 另外,用户输入的 url 与服务器如何处理它之间的桥梁是 Handler Mappings。对于 .aspx 和 .cshtml(或任何扩展名),HttpModule 负责查找适当的 .dll 或文件以执行并提供给浏览器。
  • @mellamokb 我不知道他是否想要技术概述,所以我只是陈述了正常的部分:) 如果您认为他想要,我可以随意回答更多技术细节,我正确的话会点赞:)
  • 信息量很大!那么它是如何从 Default.aspx.cs 到包含 Default.aspx.cs 编译结果的程序集呢?
  • 正如@mellamokb 所说,这都是关于 Handlers (至少在 IIS 中 - 不了解 Apache,因为我是 .NET 开发人员),请参阅 their importance here,并且,在主题中检查此better explanation,了解从第一个请求到 IIS 服务器中的响应发生了什么
  • 那些似乎不包含有关 aspnet_isapi.dll 模块如何找到正确 dll 的任何信息... :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多